【问题标题】:actual difference between creating object using superclass reference [duplicate]使用超类引用创建对象之间的实际区别
【发布时间】:2013-07-18 07:21:08
【问题描述】:

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

喜欢

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

【问题讨论】:

标签: java generics collections


【解决方案1】:

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

List l=new ArrayList();

您可以稍后更改实现,而不会影响引用它的代码。

List l=new LinkedList();

这称为 coding to an interface ,而不是实现。它符合Liskov Substitution Principle。当您知道或预期更改和/或不同的实现时,对接口进行编码。

我可以考虑将其声明为的唯一原因

ArrayList ar=new ArrayList();

当我确定实现将来不会改变时(但请记住,改变是唯一的常量)并且我想在我的代码中使用ArrayList 特定方法,这些方法未在List 接口中定义,并且你不想使用这样的演员:

List list = new ArrayList();
((ArrayList) list).trimToSize();

【讨论】:

    【解决方案2】:

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

    主要的好处是你可以持有它的任何子类的对象。在某些情况下,您不知道在运行时将获得什么对象,但您确信您将获得 Parent 类或其任何子类的对象。这可以减少代码的大小和您将编写的方法的数量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 2013-05-19
      • 1970-01-01
      • 2010-11-15
      相关资源
      最近更新 更多