我在以下代码中获取ClassCastEception。 我班扩展了人类。为什么我不能将Me对象转向Person。我无法理解这里的逻辑。请任何人清楚地说清楚。
public class Conv {
public class Person {
public void setName(String name) {
this.name = name;
}
public String name = "X";
public Person(String n) {
name = n;
}
/*
* many other variables and procedures
*/
}
public class Me extends Person {
/*
* nothing more in this class
*/
public Me(String n) {
super(n);
}
}
public void test() {
Person p = new Person("Roy");
Me a = (Me) p;
System.out.println(a.name);
}
public static void main(String[] args) {
new Conv().test();
}
}
答案 0 :(得分:2)
每只猫都是动物。但并非每一只动物都是猫。同样的规则适用于此。您无法将每个Person
转为Me
。每个Me
都是Person
的位置。
答案 1 :(得分:0)
您创建的p
为new Person
,而不是new Me
。对于强制转换,它是检查的运行时类型。如果您创建Person p = new Me("Roy")
,那么您可以将其转换为Me
,因为实际上(在运行时),即使它被声明为Person
,它也是Me
。