重寫:子類對父類可訪問方法的實現進行重新編寫——方法簽名(返回值、參數列表)不變,方法體邏輯重寫。核心優勢:子類可根據自身業務定義專屬行為,實現「一個接口,多種實現」。
class Animal {
public void move() { System.out.println("動物可以移動"); }
}
class Dog extends Animal {
@Override
public void move() { System.out.println("狗可以跑和走"); }
}
public class Test {
public static void main(String[] args) {
Animal a = new Animal();
Animal b = new Dog(); // 父類引用指向子類對象
a.move(); // 輸出:動物可以移動
b.move(); // 輸出:狗可以跑和走(動態綁定)
}
}
原理:編譯期檢查引用類型(Animal 有 move()),運行期 JVM 根據實際對象類型(Dog)調用對應方法——這就是動態多態。
Animal b = new Dog();
b.bark(); // 編譯錯誤:Animal 類無 bark() 方法
修正:Dog b = new Dog(); 或向父類添加 bark() 方法。
public 不能改為 protected)final 方法禁止重寫static 方法不能重寫(屬類不屬對象),但可隱藏private/final 方法public/protected 非 final 方法編譯期強制檢查是否真正重寫父類方法,防止拼寫錯誤導致變成「重載」。
重寫是 Java 面向對象三大特性(封裝、繼承、多態)中「多態」的核心體現。掌握規則邊界,善用 @Override,能寫出健壯、可擴展的繼承體系。