有什么区别"父母c =新孩子()"和"孩子c =新孩子()"?

时间:2014-06-24 02:02:04

标签: java inheritance constructor

我是Java的新手,所以请耐心等待我,我试着查看这个问题,但我遇到了麻烦,因为我不知道这个问题涉及的基本术语。

假设:

class Parent {}

class Child extends Parent {}

有什么区别:

Parent c = new Child();

Child c = new Child();

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

2 个答案:

答案 0 :(得分:3)

在运行时没有区别。

仅Java编译器(和类型检查器)有所不同。在第一种情况下,您声明关于c的最有用的信息是它是Parent,即使运行时类型更具体。

这有两个主要影响:

  • c可在需要Parent时使用,但在需要Child时则无法使用
  • 如果你想将c的类型更改为另一种类型(让我们假设为class Nephew extends Parent),唯一必要的是改变实例化(例如new Child()变为new Nephew() }

第二个影响的结果是,如果代码编译并且c被声明为Parent,这意味着您没有使用任何尚未在Parent中声明的功能{1}},因此从Parent延伸的每个其他类都是有效的substitute

答案 1 :(得分:0)

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

这正是在这里所做的。

加上看看这个 Does Parent obj = new Child(); make sense?