網頁

2017/9/25

Java @Override annotation

Java中的@Override annotation(標註/注釋/注解)是指被標註的方法必須覆寫父類別(superclass)的同個方法。

如果標示@Override的方法並沒有覆寫或實作父類別的方法,則編譯器會報錯。

例如HybridDog(米克斯犬)繼承父類別Dog,覆寫run()方法。
Dog實作Animal介面,實作run()方法

Animal介面,有一個未實作的方法run()

public interface Animal {

  public void run();
  
}

Dog類別實作Animal介面,覆寫Animalrun()方法。

public class Dog implements Animal{

  @Override
  public void run() {
    System.out.println("狗狗跑");
  }
}

HybridDog繼承Dog,覆寫Dogrun()方法。

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()是執行HybridDogrun()方法,所以執行結果如下。

米克斯跑

以上表現出的行為即為物件導向中的多型(Polymorphism),也就是一個類別(Class)可有多種實例(Instance)來解釋。


不過即使不標示@Override的方法也是可以正常的覆寫或實作父類別的同個方法,但有標示@Override會讓人直覺地了解到這個方法有覆寫父類別的方法。

此外在修改父類別的方法時可減少對子類別的影響,因為一旦刪除了父類別的方法,則子類別有@Override標示的同個方法編譯器會報錯。


參考:

沒有留言:

張貼留言