Јава супер кључна реч (са примерима)

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

superКључна реч у Јави се користи у подкласе за приступ суперцласс чланова (атрибута, конструктори и методама).

Пре него што научимо о superкључној речи, обавезно сазнајте о наслеђивању Јава.

Употреба супер кључне речи

  1. Да позове методе суперкласе која је замењена у подкласи.
  2. Да бисте приступили атрибутима (пољима) суперкласе ако и суперкласа и подкласа имају атрибуте са истим именом.
  3. Да се ​​експлицитно позове суперкласа но-арг (подразумевано) или параметризовани конструктор из конструктора подкласе.

Хајде да разумемо сваку од ових употреба.

1. Приступ надјачаним методама суперкласе

Ако су методе са истим именом дефинисане и у суперкласи и у подкласи, метода у подкласи поништава методу у суперкласи. То се назива надјачавање методе.

Пример 1: Замена методе

 class Animal ( // overridden method public void display()( System.out.println("I am an animal"); ) ) class Dog extends Animal ( // overriding method @Override public void display()( System.out.println("I am a dog"); ) public void printMessage()( display(); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); dog1.printMessage(); ) ) 

Оутпут

 Ја сам пас 

У овом примеру, израдом објекта дог1 класе Дог, можемо позвати његову методу принтМессаге () која затим извршава display()израз.

Будући да display()је дефинисан у обе класе, метода поткласе Дог надјачава методу суперкласе Анимал. Дакле, display()назива се подкласа.

Шта ако се мора позвати надјачана метода суперкласе?

Користимо super.display()ако display()треба позвати надјачану методу суперкласе Анимал.

Пример 2: супер за позивање методе Суперцласс

 class Animal ( // overridden method public void display()( System.out.println("I am an animal"); ) ) class Dog extends Animal ( // overriding method @Override public void display()( System.out.println("I am a dog"); ) public void printMessage()( // this calls overriding method display(); // this calls overridden method super.display(); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); dog1.printMessage(); ) ) 

Оутпут

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

Ево како функционише горњи програм.

2. Приступ атрибутима суперкласе

Суперкласа и поткласа могу имати атрибуте са истим именом. Користимо superкључну реч за приступ атрибуту суперкласе.

Пример 3: Приступ атрибуту суперкласе

 class Animal ( protected String; ) class Dog extends Animal ( public String; public void printType() ( System.out.println("I am a " + type); System.out.println("I am an " + super.type); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); dog1.printType(); ) ) 

Излаз :

 Ја сам сисар Ја сам животиња 

У овом примеру смо дефинисали исти тип поља инстанце и у суперкласи Анимал и у подкласи Дог.

Затим смо креирали објект дог1 класе Дог. Затим се printType()метода позива помоћу овог објекта.

Унутар printType()функције,

  • тип односи се на атрибут поткласе Пас.
  • супер.тип односи се на атрибут суперкласе Анимал.

Дакле, System.out.println("I am a " + type);отисци Ја сам сисар. И, System.out.println("I am an " + super.type);отисци Ја сам животиња.

3. Употреба супер () за приступ конструктору суперкласе

Као што знамо, када се креира објекат класе, аутоматски се позива његов задати конструктор.

Да бисмо експлицитно позвали конструктор суперкласе из конструктора подкласе, користимо super(). То је посебан облик superкључне речи.

super() може се користити само унутар конструктора поткласе и мора бити прва изјава.

Пример 4: Употреба супер ()

 class Animal ( // default or no-arg constructor of class Animal Animal() ( System.out.println("I am an animal"); ) ) class Dog extends Animal ( // default or no-arg constructor of class Dog Dog() ( // calling default constructor of the superclass super(); System.out.println("I am a dog"); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); ) ) 

Оутпут

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

Овде, када се креира објекат дог1 класе Дог, он аутоматски позива подразумевани или но-арг конструктор те класе.

Унутар конструктора подкласе, super()наредба позива конструктор суперкласе и извршава изразе унутар ње. Дакле, добијамо излаз Ја сам животиња.

Ток програма се затим враћа натраг у конструктор подкласе и извршава преостале изразе. Тако ћу бити одштампан пас.

Међутим, употреба super()није обавезна. Чак и ако super()се не користи у конструктору подкласе, компајлер имплицитно позива подразумевани конструктор суперкласе.

Па, зашто користити сувишни код ако компајлер аутоматски позива супер ()?

Потребно је ако параметарски конструктор (конструктор који узима аргументе) суперкласе мора бити позван из конструктора подкласе.

Параметар super()мора увек бити прва изјава у телу конструктора подкласе, у супротном добијамо грешку компилације.

Пример 5: Позивање параметарског конструктора помоћу супер ()

 class Animal ( // default or no-arg constructor Animal() ( System.out.println("I am an animal"); ) // parameterized constructor Animal(String type) ( System.out.println("Type: "+type); ) ) class Dog extends Animal ( // default constructor Dog() ( // calling parameterized constructor of the superclass super("Animal"); System.out.println("I am a dog"); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); ) ) 

Оутпут

 Тип: Животиња Ја сам пас 

Компајлер може аутоматски позвати конструктор но-арг. Међутим, не може да позове параметризоване конструкторе.

Ако треба позвати параметризовани конструктор, морамо га експлицитно дефинисати у конструктору подкласе.

Имајте на уму да смо у горњем примеру изричито позвали параметризовани конструктор super("Animal"). Компајлер у овом случају не позива подразумевани конструктор суперкласе.

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