【问题标题】:What is the difference between "Parent c = new Child()" and "Child c = new Child()"? [duplicate]“Parent c = new Child()”和“Child c = new Child()”有什么区别? [复制]
【发布时间】:2014-06-24 02:02:03
【问题描述】:

我是 Java 新手,所以请多多包涵,我试着查找这个问题,但我遇到了麻烦,因为我不知道这个问题所涉及的基本术语。

假设:

class Parent {}

class Child extends Parent {}

有什么区别:

Parent c = new Child();

Child c = new Child();

提前感谢您提供的任何帮助。

【问题讨论】:

标签: java inheritance constructor


【解决方案1】:

在运行时没有区别。

只有 Java 编译器(和类型检查器)有区别。在第一种情况下,您声明您对c 了解最多的信息是它是Parent,即使运行时类型更具体。

这有两个主要影响:

  • c 可以在需要 Parent 时使用,但不能在需要 Child 时使用
  • 如果您想将c 的类型更改为另一种类型(假设class Nephew extends Parent),唯一必要的就是更改实例化(例如,new Child() 变为new Nephew()

第二个效果是这样一个事实的结果,如果代码编译并且c被声明为Parent,这意味着您没有使用Parent中尚未声明的任何功能,所以从Parent 扩展的所有其他类都是有效的substitute

【讨论】:

    【解决方案2】:

    在java中记住这一点-父类对象可以保存对子类对象的引用..

    这正是这里正在做的事情。

    另外看看这个 Does Parent obj = new Child(); make sense?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-06
      相关资源
      最近更新 更多