在我正确掌握接口最佳实践的过程中,我注意到了以下声明:
List<String> myList = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)
代替
ArrayList<String> myList = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)
- 要我的理解,是因为它可以让有一天你不希望实现一个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");
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,我无法访问batheSelf()方法,因为它仅适用于Cat.这使我相信,我应该只从接口中声明,如果我只打算使用的接口(而不是从子类中额外的方法)声明的方法,否则我应该直接从类(在这种情况下,猫)申报.我在这个假设中是否正确?
我一直听到大多数与节目相关的网站上的声明:
编程到接口而不是实现
但是我不明白其含义?
例子会有所帮助.
编辑:我收到了很多好的答案,所以你可以用一些代码片段来补充它,以便更好地理解这个主题.谢谢!
Java中的FileInputStream和BufferedInputStream有什么区别?