在下面的示例中:
class Parent{
void fun() {
System.out.println("Parent class");
}
}
class Child extends Parent{
}
public class Main {
public static void main(String[] ar) {
Child ch = new Child();
ch.fun();
}
}
继承示例,在实例化对象时,我们可以将对象创建为Parent ch = new Child();
,这是有效的,但是为什么我们不能像这样Child ch = new Parent();
预先感谢。
答案 0 :(得分:1)
Child ch = new Parent()
无效,因为并非每个Parent
都是Child
。
假设您有第三堂课:
class AnotherChild extends Parent {int age = 2;}
以下内容也将有效:
Parent otherChild = new AnotherChild();
如果要使Cild child = new Parent()
有效,则出于相同的原因
Child child = new AnotherChild()
将也必须有效,因为AnotherChild
是 Parent
。
现在很明显,这是有问题的,因为Child
与AnotherChild
不同。
选择本示例是为了使其显而易见,但即使是简单的Parent
对象(new Parent()
)也不是Child
实例,因为它没有使用{{ 1}}类或其任何子类。
所有这些都是编译时类型检查,可确保代码安全性和对象/变量兼容性。可以使用允许的强制转换解决问题,但是如果运行时对象实际上是不兼容的类型,则执行仍然会失败。
答案 1 :(得分:1)
在您的示例中,您有class Child extends Parent{
。这意味着Child
是Parent
,但Parent
不是Child
。 Parent
是更通用的父类(讽刺的),而Child
是更具体的子类。因此,您可以执行以下操作:
Parent ch = new Child();
因为您要声明通用Parent
对象,然后将其实例化为Child
对象。但是您不能这样做:
Child ch = new Parent();
因为不能将其声明为更具体的Child
对象,然后将其实例化为不那么具体的Parent
对象