考慮這些類:Java中的父類和子類可以有相同的實例變量嗎?
class Parent {
int a;
}
class Child extends Parent {
int a; // error?
}
應的a
在Child
聲明不因int a
多次聲明給編譯錯誤?
考慮這些類:Java中的父類和子類可以有相同的實例變量嗎?
class Parent {
int a;
}
class Child extends Parent {
int a; // error?
}
應的a
在Child
聲明不因int a
多次聲明給編譯錯誤?
child.a
陰影(或隱藏)parent.a
。
這是合法的Java,但應該避免。我希望你的IDE有一個選項可以給你一個警告。
但是請注意,這只是一個問題,因爲您已經向世界展示了一個變量。如果你確保所有的變量都是私有的(從字段的實現中分離出方法的API),那麼如果父項和子項都具有相同的字段名稱都沒有關係 - 孩子不會無論如何能夠看到父母的領域。如果將一種方法從孩子移到父母,這可能會引起混淆,而且通常對於可讀性來說不是很好,但它比隱藏情況要好。
它有點像嫁給你的表弟;法律,但不建議。
它會導致各種令人困惑的行爲,因爲子類聲明隱藏了父類聲明。
它被稱爲陰影,可能會導致開發人員遇到問題。
你的情況:
Child child = new Child();
child.a = 1;
System.out.println(child.a);
System.out.println(((Parent)child).a);
將打印
1
0
不會有任何編譯錯誤或運行時錯誤。
public class Parent {
private String name;
private int age;
}
public class Child extends Parent {
String parent;
public int age;
}
在這裏,您將可以從主類訪問child.age ...這是你可以通過具有派生類
野蠻公共變量得到的唯一好處......... – Andrew 2017-10-16 17:46:53