1
我不確定這些問題是否仍然適合被問,因爲可能已經有答案。但是當涉及父類和子類關係中的屬性時,我仍然不理解繼承的概念。請注意下面的例子。Iinherited字段的值不會更改
class Animal{
public int lifeSpan = 50;
public String imAn(){
return "I'm an Animal";
}
}
class Elephant extends Animal{
public int lifeSpan = 100;
public String imAn(){
return "I'm an Elephant";
}
}
public class Test{
public static void main(String args[]){
Animal animal = new Elephant();
System.out.println(animal.imAn()+" and i live around "+animal.lifeSpan+" years");
}
}
答案將是:我是大象,我生活在50年左右。
我明白這裏的虛擬方法調用概念,但是什麼使得它不會加載子類的lifeSpan屬性。這是否意味着類屬性不是多態的?
我可以看到上述問題的更好的實現。謝謝你的解釋。但是我完全覺得如果它的隱藏屬性的範圍是無用的。林不知道,但是,在這種情況下,java應該提供一個編譯時錯誤。我非常欣賞你限制可變私人決賽的方式。 – 2014-09-27 07:19:01
@KumarKailash:它爲什麼會給編譯時錯誤 - 和*哪裏*?請注意,任何具有「Elephant」類型表達式的代碼都將使用在「Elephant」中聲明的字段,任何具有「Animal」類型表達式的代碼都將使用在「Animal」中聲明的字段。從根本上說,問題是你有兩個領域,但只有一個信息。有時候它可能會使層次結構中的兩個類都具有相同名稱的字段 - 但是如果你的字段是私有的(因爲我相信它們幾乎總是),它不會成爲一個問題。 – 2014-09-27 07:24:13
非常感謝。非常有說服力。是的,我同意在層次結構中具有相同名稱的字段沒有任何問題。 – 2014-09-27 07:29:07