我刚刚测试了这段代码。
主要的。
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
。