Java-интерфейсы и новый класс
Я не могу понять простую вещь. пример: A - это интерфейс, B - класс, который правильно реализует A. Какую дозу точно означает выполнение:
A name = new B(some_argument);
Я вижу, что многие люди используют это вместо
B name = new B(some_argument);
Но я не могу понять, какую дозу это означает создание объекта с интерфейсом. И ПОЧЕМУ они это делают? Есть некоторые различия между ними? Иногда один лучше другого? например обратная доза не работает
B name = new A();
1 ответ
Технически оба работают.
Причина, по которой большинство людей используют первое решение (и вам следует это делать), заключается в том, что интерфейс определяет определенный контракт / API для типа классов. Это означает, что интерфейс используется, когда вы не знаете, его реализация или реализация может быть заменена.
Таким образом, кодирование на основе интерфейса, а не на основе реальной конкретной реализации - лучший способ сделать ваш код взаимозаменяемым и универсальным, что поможет вам модульно модифицировать ваш код, сохранить жестко-зависимую зависимость между классами как можно ниже и сделать ваш код поддерживаемым.
Также интерфейс может использоваться для добавления дополнительных функций в класс, так как вы можете реализовать несколько интерфейсов, но расширить только один класс.
Практический пример: подумайте о SDK для плагина. Это определяет некоторый интерфейс. Как вы хотите вызывать функцию класса, реализующего этот интерфейс, когда реализация этого интерфейса выполняется другим парнем, пишущим плагин через два года после разработки вашего приложения /sdk?;)