我很努力去理解變量被覆蓋的方法覆蓋用Java繼承的概念。Java變量被覆蓋的方法被覆蓋的概念
情況1:
class Car{
public int gearRatio = 8;
public String accelerate() { return "Accelerate : Car"; }
}
class SportsCar extends Car{
public int gearRatio = 9;
public String accelerate() { return "Accelerate : SportsCar"; }
public static void main(String[] args){
Car c = new SportsCar();
System.out.println(c.gearRatio+" "+c.accelerate());
}
}
輸出:8加速:跑車。
案例2:
public class TestClass{
public static void main(String args[ ]){
A o1 = new C();
B o2 = (B) o1;
System.out.println(o1.m1());
System.out.println(o2.i);
}
}
class A { int i = 10; int m1() { return i; } }
class B extends A { int i = 20; int m1() { return i; } }
class C extends B { int i = 30; int m1() { return i; } }
輸出:30,20
所以,如果我理解正確的話,超類變量總是被調用,除非子類變量被顯式調用。但是對於調用子類重寫方法的方法,情況正好相反,除非顯式調用超類。
我會認爲變量和方法應該是相同的,否則在創建具有相同變量的子類時應該有編譯錯誤。
有人可以解釋,如果這是正確的,爲什麼java這樣工作請。
+1」注意,如果你的變量是私人的,因爲他們幾乎總是應該的,情況永遠不可見「 – kosa
因此,爲什麼變量不是多態處理的概念並不重要,因爲它們應該始終通過處理多態的方法? – Quinma