我在java中通過覆蓋功能時有一個疑問。靜態方法的繼承和靜態變量繼承有何不同?
考慮下面的代碼:
class Vehicle {
static int speed = 50;
public static void display() {
System.out.println(speed);
}
}
class Jeep extends Vehicle {
int speed = 100;
void display() { //GETTING COMPILE TIME ERROR
System.out.println(speed);//will print speed of Bike
}
public static void main(String args[]) {
Jeep b = new Jeep();
System.out.println(b.speed);
}
}
我讀的靜態方法不能被重寫。
但是在上面的代碼中,我在父類Vehicle中聲明瞭一個靜態變量'speed'。並且我在子類中創建了一個名稱爲「速度」的實例變量。我沒有得到任何編譯時錯誤,因爲我更改了子類中靜態變量'speed'的值。
我面臨的編譯時間問題,而試圖重寫顯示方法,雖然我沒有得到任何錯誤,而重新聲明變量「速度」雖然兩者都是在父類的靜態。
可能是什麼原因導致子類的speed
變量隱藏了父類的靜態speed
變量,但與display
方法不一樣,並顯示編譯時錯誤?
你要問哪一個呢?實例字段或方法? '速度'還是'顯示'? (它很重要。) –
你沒有在子類中改變任何靜態變量'speed'? – SomeJavaGuy
字段永遠不能被覆蓋,無論是否爲靜態,所以字段沒有問題。 –