2010-08-17 148 views

回答

20

child.a陰影(或隱藏parent.a

這是合法的Java,但應該避免。我希望你的IDE有一個選項可以給你一個警告。

但是請注意,這只是一個問題,因爲您已經向世界展示了一個變量。如果你確保所有的變量都是私有的(從字段的實現中分離出方法的API),那麼如果父項和子項都具有相同的字段名稱都沒有關係 - 孩子不會無論如何能夠看到父母的領域。如果將一種方法從孩子移到父母,這可能會引起混淆,而且通常對於可讀性來說不是很好,但它比隱藏情況要好。

4

它有點像嫁給你的表弟;法律,但不建議。

它會導致各種令人困惑的行爲,因爲子類聲明隱藏了父類聲明。

+0

野蠻公共變量得到的唯一好處......... – Andrew 2017-10-16 17:46:53

9

它被稱爲陰影,可能會導致開發人員遇到問題。

你的情況:

Child child = new Child(); 
child.a = 1; 
System.out.println(child.a); 
System.out.println(((Parent)child).a); 

將打印

1 
0 
0

不會有任何編譯錯誤或運行時錯誤。

public class Parent { 
private String name; 
private int age; 
} 

public class Child extends Parent { 
String parent; 
public int age; 
} 

在這裏,您將可以從主類訪問child.age ...這是你可以通過具有派生類

相關問題