Страницы

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

среда, 22 января 2020 г.

Зачем создавать объект и ссылать его на интерфейс?

#java #классы #интерфейс


Хотел бы узнать, зачем нам создавать объект и ссылать его на интерфейс? То есть:

interface AbleToEat(){
   public void eat();
}

class Animal implements AbleToEat(){

@Override
public void eat(){
sout("Animal is eating");
 }
}

public class Test{
  psvm{
      AbleToEat ableToEat = new Animal();
      ableTOEat.eat();
 }
}


Почему бы не сделать Animal ableToEat = new Animal()? Какое различие, зачем это делается?
Объясните пожалуйста!
    


Ответы

Ответ 1



Такой подход вытекает из понятия абстракции, одного из ключевого в мире ООП. На практике это позволяет избавить программиста, кто будет пользоваться вашим кодом, от деталей конкретной реализации. Использование интерфейсов позволяет использовать объекты, реализующие интерфейс, вне зависимости от того, что под капотом. Более конкретно: может быть несколько объектов, реализующих этот интерфейс, работать с ними можно полностью одинаково в рамках реализованного интерфейса. Например: class Dog implements AbleToEat() { @Override public void eat() { sout("Dog is eating"); } } class Snake implements AbleToEat() { @Override public void eat() { sout("Mmmm rabit is tasty!"); } } class Test { ArrayList whoIsEat = new ArrayList<>(); whoIsEat.add(new Dog()); whoIsEat.add(new Snake()); for (AbleToEat something : whoIsEat) { something.eat(); } } Для более глубокого понимания вопроса советую почитать что абстракцию в ООП.

Ответ 2



Чтобы не привязываться к реализации определенного класса, а работать с обозначенным поведением интерфейса. Последний принцип solid это гласит. В любой момент вы можете подставить другую реализацию, но методы точно останутся теме же!

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

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