Страницы

Поиск по вопросам

среда, 5 февраля 2020 г.

Обращение к методу, который не реализован в интерфейсе

#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(). Тогда полиморфизм будет реализован в полной мере. Совет: Книга Рефакторинг Мартина вам в помощь! Очень полезная!

Комментариев нет:

Отправить комментарий