我刚测试了这段代码。
主要
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
。
答案 0 :(得分:3)
您的Parent parent
是参考,而不是对象。这意味着您可以引用作为父级的内容,但可以是子类。