#java #ооп #интерфейс
Есть интерфейс: public interface Animal { void eat(); void sleep(); void go(); } Есть 2 класса животных (представлен 1): public class Tiger implements Animal { private int x; //координаты нахождения private int y; public Tiger(int x, int y { this.x = x; this.y = y; } @Override public void eat() {} @Override public void sleep() {} @Override public void go() {} public int getX() { return x; } public int getY() { return y; } } И класс Locator public class Locator { private int x; private int y; public Locator(int x, int y) { this.x = x; this.y = y; } public void find(Animal animal) { /** * Метод сравнивает координаты локатора и координаты животного. * Если координаты совпадают, выводится сообщение */ } } Нужно в методе find класса Locator обратиться к animal.getX(). Как это сделать, не изменяя интерфейс и не используя явное приведение типов ((Tiger)animal). И вообще, возможно ли это?
Ответы
Ответ 1
Никак. Возможно, стоит расширить интерфейс Animal или ввести новый, в котором будут предоставляться координаты животного.Ответ 2
Отрефакторить и сделать Move Method для getX и getY. Если Вам нужно getXXXX() вызывать у Animal, значит эти методы должны быть именно там. А еще лучше перенести туда метод find(). Тогда полиморфизм будет реализован в полной мере. Совет: Книга Рефакторинг Мартина вам в помощь! Очень полезная!
Комментариев нет:
Отправить комментарий