logo

Супер ключова дума в Java

The супер ключова дума в Java е референтна променлива, която се използва за препращане към обект на непосредствен родителски клас.

Всеки път, когато създавате екземпляр на подклас, имплицитно се създава екземпляр на родителски клас, който се препраща от суперреферентна променлива.

Използване на Java супер ключова дума

  1. super може да се използва за препращане към променлива на екземпляр на непосредствен родителски клас.
  2. super може да се използва за извикване на метод на непосредствен родителски клас.
  3. super() може да се използва за извикване на конструктор на непосредствен родителски клас.
Използване на ключова дума Java Super

1) super се използва за препращане към променлива на екземпляр на непосредствен родителски клас.

Можем да използваме ключова дума super за достъп до члена на данните или полето на родителския клас. Използва се, ако родителският клас и дъщерният клас имат еднакви полета.

какво е подаване на директория
 class Animal{ String color='white'; } class Dog extends Animal{ String color='black'; void printColor(){ System.out.println(color);//prints color of Dog class System.out.println(super.color);//prints color of Animal class } } class TestSuper1{ public static void main(String args[]){ Dog d=new Dog(); d.printColor(); }} 
Тествайте сега

Изход:

 black white 

В горния пример и двата класа Animal и Dog имат общ цвят на свойството. Ако отпечатаме свойството цвят, то ще отпечата цвета на текущия клас по подразбиране. За достъп до родителското свойство трябва да използваме ключова дума super.

2) super може да се използва за извикване на метод на родителски клас

Ключовата дума super може също да се използва за извикване на метод на родителски клас. Трябва да се използва, ако подкласът съдържа същия метод като родителския клас. С други думи, използва се, ако методът е заменен.

 class Animal{ void eat(){System.out.println('eating...');} } class Dog extends Animal{ void eat(){System.out.println('eating bread...');} void bark(){System.out.println('barking...');} void work(){ super.eat(); bark(); } } class TestSuper2{ public static void main(String args[]){ Dog d=new Dog(); d.work(); }} 
Тествайте сега

Изход:

 eating... barking... 

В горния пример Animal и Dog и двата класа имат метод eat(), ако извикаме метод eat() от клас Dog, той ще извика метода eat() на клас Dog по подразбиране, тъй като се дава приоритет на local.

За да извикаме метода на родителския клас, трябва да използваме ключова дума super.

3) super се използва за извикване на конструктор на родителски клас.

Ключовата дума super може да се използва и за извикване на конструктора на родителския клас. Да видим един прост пример:

 class Animal{ Animal(){System.out.println('animal is created');} } class Dog extends Animal{ Dog(){ super(); System.out.println('dog is created'); } } class TestSuper3{ public static void main(String args[]){ Dog d=new Dog(); }} 
Тествайте сега

Изход:

 animal is created dog is created 

Забележка: super() се добавя във всеки конструктор на клас автоматично от компилатора, ако няма super() или this().

Java е страхотна

Както добре знаем, че конструкторът по подразбиране се предоставя от компилатора автоматично, ако няма конструктор. Но също така добавя super() като първия израз.

Друг пример за ключова дума super, където super() се предоставя имплицитно от компилатора.

 class Animal{ Animal(){System.out.println('animal is created');} } class Dog extends Animal{ Dog(){ System.out.println('dog is created'); } } class TestSuper4{ public static void main(String args[]){ Dog d=new Dog(); }} 
Тествайте сега

Изход:

 animal is created dog is created 

супер пример: реална употреба

Нека видим истинската употреба на ключовата дума super. Тук класът Emp наследява класа Person, така че всички свойства на Person ще бъдат наследени от Emp по подразбиране. За да инициализираме цялото свойство, ние използваме конструктор на родителски клас от дъщерен клас. По този начин ние използваме повторно конструктора на родителския клас.

 class Person{ int id; String name; Person(int id,String name){ this.id=id; this.name=name; } } class Emp extends Person{ float salary; Emp(int id,String name,float salary){ super(id,name);//reusing parent constructor this.salary=salary; } void display(){System.out.println(id+' '+name+' '+salary);} } class TestSuper5{ public static void main(String[] args){ Emp e1=new Emp(1,'ankit',45000f); e1.display(); }} 
Тествайте сега

Изход:

 1 ankit 45000