пятница, 12 сентября 2014 г.

Аннотация Override


Пример работы с аннотацией Override в языке Java

Задача программы вывод голосов разных существ. Мы будем работать с 3 видами: это собака, кошка и рыба. Предположим, что мы пишем некое игровое приложение и нам необходимо выводить звуки разных животных но, среди животных есть те, которые не произносят явных звуков, но они входят в общий класс Pet и используют общий метод Voice. Для того, чтобы персонализировать метод Voice для определенного суб класса (Fish) мы будем использовать аннотацию Override.


 
public class Pet{ 
 //Общий класс, объединяющий всех животных
  public void Voice(String sayit){ 
   System.out.println(sayit); 
  }
} 
 
public class Cat extends Pet{ 
 //Кошкин класс
} 
 
public class Dog extends Pet{ 
 //Собчкин класс
} 
 
public class Fish extends Pet{ 
 //В несколько строк кода мы решили проблему разговоров рыб в нашей программе. 
  @Override 
  public void Voice(String sayit){ 
   System.out.println("Рыбы не разговаривают"); 
  } 
}
 
 
public class PetVoices extends Application {

 @Override 
 public void start(Stage stage) throws Exception { 
  Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml")); 
 
  Scene scene = new Scene(root); 
 
  stage.setScene(scene); 
  stage.show(); 
 
  Dog javaTuzik = new Dog();  
  javaTuzik.Voice("Gav-gav-gav"); 
 
  Cat javaBarsik = new Cat(); 
  javaBarsik.Voice("Meu-meu-meu"); 
 
  Fish javaFish = new Fish(); 
  javaFish.Voice("Bul-bul-bul"); 
} 
 
 /** 
 * @param args the command line arguments 
 */ 
 public static void main(String[] args) { 
  launch(args); 
 } 
 
} 

Вывод работы программы:

Gav-gav-gav
Meu-meu-meu
Рыбы не разговаривают

Справка по аннотации: @Override — проверяет, переопределен ли метод. Вызывает предупреждение компиляции, если метод не найден в родительском классе;

Явно указывать переопределен метод или нет - не обязательно, т.е. если мы напишем класс Fish без аннотации Override, то он будет функционировать, как и прежде. Но для себя лично лучше указывать, что мы переопределили метод. 

Такая запись без аннотации правильная:

class Fish extends Pet{
  public void Voice(String sayit){
   System.out.println("Рыбы не разговаривают");
}

Согласно c Wikipedia: Аннотированы могут быть пакеты, классы, методы, переменные и параметры. В общем виде выглядит как @ + имя аннотации, написанное перед именем переменной, параметра, метода, класса, пакета, либо перед их модификаторами.

Итог: Использование аннотации override может быть очень полезно во многих случаях. Я думаю Вы уже заметили, что данный вид аннотаций используется довольно часто. 

Потенциал использования override очень высок, с его помощью мы можем избежать массы проблем и огромного количества лишнего кода в наших программах.

Еще немного про явно и не явное определение: отсутствие явного определения аннотации для компилятора не вызовет никаких ошибок. Главное, чтобы в родительском классе Pet метод Voice был определен, т.е. переопределить можно только то, что уже существует. 

Например, IDE NetBeans советует нам указать, что метод переопределен и я с ним солидарен.

От автора: к сожалению, понятных примеров использования аннотаций на просторах сети очень мало, если не сказать больше. Для понимания программирования в целом и программирования в частности на Java нужно понимание аннотаций. К конкретному предмету блога понимание использования аннотаций не относится, но я постараюсь публиковать понятные примеры и на такие явления тоже, для общего развития.

Если Вам все же непонятно использование аннотации override, попробует перечитать статью и поиграть с кодом написанным в статье.

P.S. Я постараюсь еще дополнить статью: дополнительными примерами и размышлениями о потенциале использования данной аннотации в языке Java.
Литература JavaFX

0 коммент.:

Отправить комментарий