В моих поисках, чтобы правильно понять передовые методы интерфейса, я заметил такие объявления, как:
List<String> myList = new ArrayList<String>();
вместо
ArrayList<String> myList = new ArrayList<String>();
-По моему мнению, причина в том, что он позволяет гибкость в случае, если в один прекрасный день вы не захотите реализовать ArrayList, но, возможно, еще один тип списка.
С этой логикой я установил пример:
public class InterfaceTest {
public static void main(String[] args) {
PetInterface p = new Cat();
p.talk();
}
}
interface PetInterface {
public void talk();
}
class Dog implements PetInterface {
@Override
public void talk() {
System.out.println("Bark!");
}
}
class Cat implements PetInterface {
@Override
public void talk() {
System.out.println("Meow!");
}
public void batheSelf() {
System.out.println("Cat bathing");
}
}
Мой вопрос: я не могу получить доступ к методу batheSelf(), потому что он существует только для Cat. Это заставляет меня думать, что я должен только объявлять из интерфейса, если я буду использовать методы, объявленные в интерфейсе (а не дополнительные методы из подкласса), иначе я должен объявить непосредственно из класса (в данном случае Cat). Правильно ли я в этом предположении?