[英]Java Downcasting/Upcasting
我在以下代碼中獲得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();
}
}
每只貓都是動物。 但是,並非每個動物都是貓。 同樣的規則在這里適用。 你不能把每個Person
轉向Me
。 每個Me
都是一個Person
。
您正在將p
創建為new Person
,而不是new Me
。 對於轉換,將檢查運行時類型。 如果創建Person p = new Me("Roy")
,則可以將其Me
為Me
因為實際上(在運行時),即使它被聲明為Person
,它也是Me
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.