使用超类引用创建对象有什么好处?
喜欢
class People{
}
class Child extends People{
}
public class Demo{
public static void main(String []){
People p=new Child(); //line 1
Child d=new Child(); //line 2
}
}
我只想知道第1行和第2行的实际使用情况。
答案 0 :(得分:4)
List l
可以引用其实现的任何对象,例如ArrayList
,LinkedList
等。第一种方法:
List l=new ArrayList();
您可以稍后更改实现,而不会影响引用它的代码。
List l=new LinkedList();
这称为coding to an interface,而非实施。这符合Liskov Substitution Principle。当您知道或预期更改和/或不同的实现时,代码到接口。
我可以考虑将其声明为
的唯一原因ArrayList ar=new ArrayList();
当我确定将来不会改变实现时(但请记住,更改是唯一的常量)并且我想在我的代码中使用ArrayList
特定方法,这些方法未在{{1}中定义接口,你不想使用像:
List
答案 1 :(得分:1)
使用超类引用创建对象有什么好处?
主要的好处是你可以保存其任何子类的对象。在某些情况下,您不知道在运行时将获得什么对象,但您确信您将获得Parent类或其任何子类的对象。这可以减少代码的大小和要编写的方法的数量。