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
標示的同個方法編譯器會報錯。
參考:
沒有留言:
張貼留言