【发布时间】:2026-01-01 15:30:02
【问题描述】:
在寻求正确掌握接口最佳实践的过程中,我注意到以下声明:
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)。我的假设是否正确?
【问题讨论】: