Java - 声明接口类型而不是类类型

15 浏览
0 Comments

Java - 声明接口类型而不是类类型

在我努力正确理解接口最佳实践的过程中,我注意到了这样的声明:

List myList = new ArrayList();

而不是

ArrayList myList = 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)进行声明。我的假设是正确的吗?

0