Java - 声明接口类型而不是类类型
Java - 声明接口类型而不是类类型
在我努力正确理解接口最佳实践的过程中,我注意到了这样的声明:
ListmyList = new ArrayList ();
而不是
ArrayListmyList = new ArrayList ();
- 据我理解,原因是这样做可以在某一天你不想实现一个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)进行声明。我的假设是正确的吗?