0

我刚刚测试了这段代码。

主要的。

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

4

1 回答 1

3

Parent parent是一个参考,而不是一个对象。这意味着您至少有一个父类的引用,但可能是一个子类。

于 2013-05-15T07:16:50.760 回答