使用Java中的Child构造函数初始化父类,理论

时间:2013-05-15 07:12:12

标签: java theory classcastexception

我刚测试了这段代码。

主要

public class Main {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Parent parent = new Child(12, "Lorem", 12);
        if (parent instanceof Parent) {
            System.out.println("Parent");
        } else if (parent instanceof Child) {
            System.out.println("Child");
        }
        outChild(parent);
    }

    private static void outChild(Parent parent) {
        Child child = (Child) parent;
        System.out.print(child);
    }
}

public class Parent {

    int id;
    String name;

    public Parent(int id, String name) {
        this.id = id;
        this.name = name;
    }

}

儿童。

public class Child extends Parent {

    int extra;

    public Child(int id, String name, int extra) {
        super(id, name);
        this.extra = extra;
    }

    @Override
    public String toString() {
        return "id: " + id + ", name: " + name + ", extra: " + extra;
    }

}

我需要一些理论。为什么我的parent个实例被视为Parent类实例,但只在extra中声明了Child个字段?

如果我写了Parent parent = new Parent(12, "Lorem");并致电outChild(Parent parent),我就会得到ClassCastException

1 个答案:

答案 0 :(得分:3)

您的Parent parent是参考,而不是对象。这意味着您可以引用作为父级的内容,但可以是子类。