Замена Јава методе

У овом упутству ћемо научити о замени метода у Јави уз помоћ примера.

У последњем упутству сазнали смо о наслеђивању. Наслеђивање је ООП својство које нам омогућава да изведемо нову класу (поткласу) из постојеће класе (суперкласу). Подкласа наслеђује атрибуте и методе суперкласе.

Сада, ако је иста метода дефинисана и у суперкласи и у подкласи, тада метода класе подкласе замењује методу суперкласе. Ово је познато као замена метода.

Пример 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()метода је присутна и у суперкласи Анимал и у подкласи Дог.

Када зовемо displayInfo()помоћу објекта д1 (објекта подкласе), позива се метода унутар подкласе Дог. displayInfo()Метода поткласе замењује исти метод суперкласна.

Обратите пажњу на употребу @Overrideнапомене у нашем примеру. У Јави су напомене метаподаци које смо користили за пружање информација компајлеру. Овде @Overrideнапомена наводи компајлер да метода након ове напомене надјачава метод суперкласе.

Није обавезна за употребу @Override. Међутим, када ово користимо, метода треба да следи сва правила надјачавања. У супротном, компајлер ће генерисати грешку.

Правила замене Јава

  • И суперкласа и подкласа морају имати исто име методе, исти тип повратка и исту листу параметара.
  • Не можемо да заменимо методу декларисану као finalи static.
  • Увек би требало да заменимо апстрактне методе суперкласе (о којима ће бити речи у каснијим туторијалима).

супер кључна реч у замени Јава-а

Уобичајено питање које се поставља током извршавања замене у Јави је:

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

Па, одговор је Да . Да бисмо приступили методи суперкласе из подкласе, користимо 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(); ) ) 

Излаз :

Ја сам животиња. Ја сам пас.

У горњем примеру, подразред Пас надјачава метод displayInfo()суперкласе Животиња.

Када методу позивамо displayInfo()помоћу објекта д1 подкласе Дог, позива се метода унутар подкласе Дог; метода унутар суперкласе се не позива.

Унутар displayInfo()подкласе Пас, некада super.displayInfo()смо називали displayInfo()суперкласу.

Важно је напоменути да се конструктори у Јави не наслеђују. Дакле, у Јави не постоји ствар која замењује конструктор.

Међутим, конструктор суперкласе можемо назвати из његове подкласе. За то користимо super(). Да бисте сазнали више, посетите Јава супер кључну реч.

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

Иста метода декларисана у суперкласи и њеним подкласама може имати различите спецификаторе приступа. Међутим, постоји ограничење.

Спецификаторе приступа можемо да користимо само у поткласама које пружају већи приступ од спецификатора приступа суперкласе. На пример,

Претпоставимо да 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(); ) ) 

Излаз :

 Ја сам пас. 

У горњем примеру, подразред Пас надјачава метод displayInfo()суперкласе Животиња.

Кад год позовемо displayInfo()користећи д1 (објекат поткласе), позива се метода унутар подкласе.

Приметите да displayInfo()је декларирано protectedу суперкласи Анимал. Исти метод има publicспецификатор приступа у подкласи Дог. То је могуће јер publicпружа већи приступ од protected.

Надјачавање апстрактних метода

У Јави су апстрактне класе створене да буду суперкласа осталих класа. А, ако класа садржи апстрактни метод, обавезно га је надјачати.

У каснијим туторијалима сазнаћемо више о апстрактним часовима и замени апстрактних метода.

Занимљиви Чланци...