這個問題在這里已經有了答案: 覆寫與隱藏 Java - 困惑 17 個答案 9 天前關閉。
根據檔案
子類中具有相同簽名(名稱,加上其引數的編號和型別)和回傳型別作為超類中的實體方法的實體方法會覆寫超類的方法。
而在靜態方法的情況下
如果子類定義了與超類中的靜態方法具有相同簽名的靜態方法,則子類中的方法會隱藏超類中的方法。
因此,我已經測驗了那里顯示的代碼示例,并添加了更多用例:
超類Animal:
public class Animal {
public static void testClassMethod() {
System.out.println("The static method in Animal");
}
public void testInstanceMethod() {
System.out.println("The instance method in Animal");
}
}
子類Cat:
public class Cat extends Animal {
public static void testClassMethod() {
System.out.println("The static method in Cat");
}
public void testInstanceMethod() {
System.out.println("The instance method in Cat");
}
public static void main(String[] args) {
Cat myCat = new Cat();
Animal myAnimal = myCat;
Animal animal = new Animal();
Animal.testClassMethod();
Cat.testClassMethod();
animal.testInstanceMethod();
myAnimal.testInstanceMethod();
}
}
這里的輸出是:
Animal 中
的靜態方法 Cat中的靜態方法
Animal中
的實體方法 Cat中的實體方法
因此,我仍然認為用具有相同簽名的子類實體方法覆寫超類實體方法和用具有相同簽名的子類靜態方法覆寫(隱藏)超類靜態(類)方法之間沒有實際區別。
我在這里想念什么?
uj5u.com熱心網友回復:
隱藏它意味著您不能呼叫super.method()子類的實作。
所以例如
class Cat extends Animal {
public static void testClassMethod() {
super.testClassMethod(); //this is not possible
System.out.println("The static method in Cat");
}
public void testInstanceMethod() {
super.testInstanceMethod(); //this is fine
System.out.println("The instance method in Cat");
}
}
uj5u.com熱心網友回復:
您可以在物件方法(非靜態)中呼叫 super(),但不能在靜態方法中呼叫 super,因為沒有“超級”物件可供呼叫。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/428619.html
