Java中的@Override annotation(標註/注釋/注解)是指被標註的方法必須覆寫父類別(superclass)的同個方法。
如果標示@Override的方法並沒有覆寫或實作父類別的方法,則編譯器會報錯。
例如HybridDog(米克斯犬)繼承父類別Dog,覆寫run()方法。
Dog實作Animal介面,實作run()方法
Animal介面,有一個未實作的方法run()。
public interface Animal {
public void run();
}
Dog類別實作Animal介面,覆寫Animal的run()方法。
public class Dog implements Animal{
@Override
public void run() {
System.out.println("狗狗跑");
}
}
HybridDog繼承Dog,覆寫Dog的run()方法。
public class HybridDog extends Dog{
@Override
public void run(){
System.out.println("米克斯跑");
}
}
測試。以下建立一個HybridDog的實例,並將其放入Animal dog中。
public class Test {
public static void main(String[] args) {
Animal dog = new HybridDog();
dog.run();
}
}
因為Animal的實例為HybridDog物件,所以dog.run()是執行HybridDog的run()方法,所以執行結果如下。
米克斯跑
以上表現出的行為即為物件導向中的多型(Polymorphism),也就是一個類別(Class)可有多種實例(Instance)來解釋。
不過即使不標示@Override的方法也是可以正常的覆寫或實作父類別的同個方法,但有標示@Override會讓人直覺地了解到這個方法有覆寫父類別的方法。
此外在修改父類別的方法時可減少對子類別的影響,因為一旦刪除了父類別的方法,則子類別有@Override標示的同個方法編譯器會報錯。
參考:
沒有留言:
張貼留言