Перевизначення методу Java

У цьому підручнику ми дізнаємося про перевизначення методів у Java за допомогою прикладів.

В останньому підручнику ми дізналися про спадкування. Спадкування - це властивість ООП, що дозволяє нам вивести новий клас (підклас) із існуючого класу (суперклас). Підклас успадковує атрибути та методи суперкласу.

Тепер, якщо один і той же метод визначений як у суперкласі, так і в підкласі, тоді метод класу підкласу замінює метод суперкласу. Це відоме як перевизначення методу.

Приклад 1: Заміна методу

 class Animal ( public void displayInfo() ( System.out.println("I am an animal."); ) ) class Dog extends Animal ( @Override public void displayInfo() ( System.out.println("I am a dog."); ) ) class Main ( public static void main(String() args) ( Dog d1 = new Dog(); d1.displayInfo(); ) ) 

Вихід :

 Я собака. 

У наведеній вище програмі displayInfo()метод присутній як у суперкласі Animal, так і в підкласі Dog.

Коли ми викликаємо displayInfo()за допомогою об'єкта d1 (об'єкт підкласу), викликається метод всередині підкласу Dog. displayInfo()Метод підкласу переопределяет той же метод суперкласу.

Зверніть увагу на використання @Overrideанотації в нашому прикладі. У Java анотації - це метадані, які ми використовували для надання інформації компілятору. Тут @Overrideанотація вказує компілятору, що метод після цієї анотації замінює метод суперкласу.

Не обов’язково використовувати @Override. Однак, коли ми використовуємо це, метод повинен дотримуватися всіх правил перевизначення. В іншому випадку компілятор видасть помилку.

Правила заміни Java

  • І суперклас, і підклас повинні мати одне й те саме ім'я методу, однаковий тип повернення та однаковий список параметрів.
  • Ми не можемо замінити метод, оголошений як finalта static.
  • Ми завжди повинні замінювати абстрактні методи суперкласу (вони будуть розглянуті в наступних підручниках).

супер ключове слово в Java Перевизначення

Типовим питанням, яке виникає під час виконання перевизначення в Java, є:

Чи можемо ми отримати доступ до методу суперкласу після заміни?

Ну, відповідь так . Щоб отримати доступ до методу суперкласу з підкласу, ми використовуємо superключове слово.

Приклад 2: Використання супер ключового слова

 class Animal ( public void displayInfo() ( System.out.println("I am an animal."); ) ) class Dog extends Animal ( public void displayInfo() ( super.displayInfo(); System.out.println("I am a dog."); ) ) class Main ( public static void main(String() args) ( Dog d1 = new Dog(); d1.displayInfo(); ) ) 

Вихід :

Я тварина. Я собака.

У наведеному вище прикладі підклас Dog замінює метод displayInfo()надкласу Animal.

Коли ми викликаємо метод, displayInfo()використовуючи об'єкт d1 підкласу Dog, викликається метод усередині підкласу Dog; метод всередині суперкласу не викликається.

Всередині displayInfo()підкласу собак ми звикли super.displayInfo()називати displayInfo()суперклас.

Важливо зазначити, що конструктори в Java не передаються у спадок. Отже, у Java немає такого поняття, як перевизначення конструктора.

Однак ми можемо назвати конструктор суперкласу з його підкласів. Для цього ми використовуємо super(). Щоб дізнатись більше, відвідайте супер-ключове слово Java.

Специфікатори доступу в перевизначенні методу

Один і той же метод, оголошений у суперкласі та його підкласах, може мати різні специфікатори доступу. Однак є обмеження.

Ми можемо використовувати лише ті специфікатори доступу в підкласах, які забезпечують більший доступ, ніж специфікатор доступу суперкласу. Наприклад,

Припустимо, оголошено метод myClass()у суперкласі protected. Тоді той самий метод myClass()у підкласі може бути publicабо protected, але ні private.

Приклад 3: Вказівник доступу в перевизначенні

 class Animal ( protected void displayInfo() ( System.out.println("I am an animal."); ) ) class Dog extends Animal ( public void displayInfo() ( System.out.println("I am a dog."); ) ) class Main ( public static void main(String() args) ( Dog d1 = new Dog(); d1.displayInfo(); ) ) 

Вихід :

 Я собака. 

У наведеному вище прикладі підклас Dog замінює метод displayInfo()надкласу Animal.

Кожного разу, коли ми викликаємо displayInfo()за допомогою d1 (об'єкт підкласу), викликається метод всередині підкласу.

Зверніть увагу, що displayInfo()це задекларовано protectedу суперкласі Animal. Цей же метод має publicспецифікатор доступу в підкласі Dog. Це можливо, оскільки publicзабезпечує більший доступ, ніж protected.

Замінні абстрактні методи

У Java абстрактні класи створюються, щоб бути суперкласом інших класів. І якщо клас містить абстрактний метод, його обов’язково потрібно замінити.

Ми пізніше дізнаємось більше про абстрактні класи та перевизначення абстрактних методів.

Цікаві статті...