使用超类引用创建对象之间的实际差异

时间:2013-07-18 07:21:09

标签: java generics collections

使用超类引用创建对象有什么好处?

喜欢

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行的实际使用情况。

2 个答案:

答案 0 :(得分:4)

List l可以引用其实现的任何对象,例如ArrayListLinkedList等。第一种方法:

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类或其任何子类的对象。这可以减少代码的大小和要编写的方法的数量。