Java中的继承示例

时间:2018-06-26 12:52:32

标签: java inheritance

在下面的示例中:

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();            预先感谢。

2 个答案:

答案 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

现在很明显,这是有问题的,因为ChildAnotherChild不同。
选择本示例是为了使其显而易见,但即使是简单的Parent对象(new Parent())也不是Child实例,因为它没有使用{{ 1}}类或其任何子类。

所有这些都是编译时类型检查,可确保代码安全性和对象/变量兼容性。可以使用允许的强制转换解决问题,但是如果运行时对象实际上是不兼容的类型,则执行仍然会失败。

答案 1 :(得分:1)

在您的示例中,您有class Child extends Parent{。这意味着ChildParent,但Parent不是ChildParent是更通用的父类(讽刺的),而Child是更具体的子类。因此,您可以执行以下操作:

 Parent ch = new Child();

因为您要声明通用Parent对象,然后将其实例化为Child对象。但是您不能这样做:

Child ch = new Parent();

因为不能将其声明为更具体的Child对象,然后将其实例化为不那么具体的Parent对象