作者roadeat (www)
看板java
標題[問題] 關於JAVA屬性覆寫的機制
時間Mon May 30 21:28:15 2011
各位好:
程式碼如下
class Father{
String name = "Father";
String greeting(){
return "class Father";
}
}
class Son extends Father{
String name = "Son";
String greeting(){
return "class Son";
}
void foo(){
System.out.println(((Son)this).name);
System.out.println(((Father)this).name);
System.out.println(((Son)this).greeting());
System.out.println(((Father)this).greeting());
}
}
public static void main(String[] args){
new Son().foo();
}
ANS:
Son
Father
class Son
class Son
疑惑:
請問為什麼((Father)this).name,轉型成為Father類別時,是列印出Father類別的
屬性name;而(Father)this).greeting(),卻會因為覆寫機制列印出class Son。
屬性不是也會覆寫嗎?new Son()時,相同都有String name不是會覆寫過去嗎?
謝謝解惑
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.25.167.23
→ awert:parent field不會被同名的child field "override" 05/30 22:42
→ awert:正確一點的用字應該叫"shadow",parent field單純被隱藏起來 05/30 22:44
推 tomap41017:推樓上回覆:) 05/30 23:45
→ roadeat:THX 05/30 23:52