Cuvânt cheie super Java (cu exemple)

În acest tutorial, vom afla despre super-cuvântul cheie în Java cu ajutorul exemplelor.

Cuvântul supercheie în Java este utilizat în subclasele pentru a accesa membrii superclasei (atribute, constructori și metode).

Înainte de a afla despre supercuvântul cheie, asigurați-vă că știți despre moștenirea Java.

Utilizări ale cuvântului cheie super

  1. Pentru a apela metodele superclasei care este suprascrisă în subclasă.
  2. Pentru a accesa atributele (câmpurile) superclasei, dacă atât superclasa, cât și subclasa au atribute cu același nume.
  3. Pentru a apela în mod explicit superclasa no-arg (implicit) sau constructor parametrizat din constructorul subclasei.

Să înțelegem fiecare dintre aceste utilizări.

1. Accesați metodele suprascrise ale superclasei

Dacă metodele cu același nume sunt definite atât în ​​superclasă, cât și în subclasă, metoda din subclasă suprascrie metoda din superclasă. Aceasta se numește metoda suprascriere.

Exemplul 1: suprascrierea metodei

 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(); ) ) 

Ieșire

 sunt un caine 

În acest exemplu, făcând un obiect dog1 din clasa Dog, putem apela metoda sa printMessage () care apoi execută display()instrucțiunea.

Întrucât display()este definit în ambele clase, metoda subclasei Dog suprascrie metoda superclasei Animal. Prin urmare, display()se numește subclasa.

Ce se întâmplă dacă trebuie apelată metoda suprascrisă a superclasei?

Folosim super.display()dacă display()trebuie apelată metoda suprascrisă a superclasei Animal.

Exemplul 2: metoda super la apel Superclass

 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(); ) ) 

Ieșire

 Sunt un câine Sunt un animal 

Iată cum funcționează programul de mai sus.

2. Atribute de acces ale superclasei

Superclasa și subclasa pot avea atribute cu același nume. Folosim supercuvântul cheie pentru a accesa atributul superclasei.

Exemplul 3: Accesați atributul superclasă

 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(); ) ) 

Ieșire :

 Sunt un mamifer Sunt un animal 

În acest exemplu, am definit același tip de câmp de instanță atât în ​​superclasa Animal, cât și în subclasa Dog.

Apoi am creat un obiect dog1 din clasa Dog. Apoi, printType()metoda se numește folosind acest obiect.

În interiorul printType()funcției,

  • tip se referă la atributul subclasei câine.
  • super.type se referă la atributul superclasei Animal.

Prin urmare, System.out.println("I am a " + type);amprentele sunt un mamifer. Și, System.out.println("I am an " + super.type);amprente sunt un animal.

3. Utilizarea super () pentru a accesa constructorul superclasei

După cum știm, atunci când este creat un obiect al unei clase, constructorul său implicit este apelat automat.

Pentru a apela în mod explicit constructorul superclasei din constructorul subclasei, folosim super(). Este o formă specială a supercuvântului cheie.

super() poate fi utilizat numai în interiorul constructorului de subclasă și trebuie să fie prima declarație.

Exemplul 4: Utilizarea super ()

 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(); ) ) 

Ieșire

 Sunt un animal Sunt un câine 

Aici, atunci când este creat un obiect dog1 din clasa Dog, acesta apelează automat constructorul implicit sau no-arg al acelei clase.

În interiorul constructorului de subclasă, super()declarația cheamă constructorul superclasei și execută instrucțiunile din interiorul acesteia. Prin urmare, obținem rezultatul că sunt un animal.

Fluxul programului revine apoi la constructorul de subclasă și execută instrucțiunile rămase. Astfel, eu sunt un câine va fi tipărit.

Cu toate acestea, utilizarea super()nu este obligatorie. Chiar dacă super()nu este utilizat în constructorul de subclasă, compilatorul apelează implicit constructorul implicit al superclasei.

Deci, de ce să folosim cod redundant dacă compilatorul invocă automat super ()?

Este necesar dacă constructorul parametrizat (un constructor care ia argumente) al superclasei trebuie apelat din constructorul subclasei.

Parametrizatul super()trebuie să fie întotdeauna prima afirmație din corpul constructorului subclasei, în caz contrar, vom obține o eroare de compilare.

Exemplul 5: Apelați la un constructor parametrizat folosind super ()

 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(); ) ) 

Ieșire

 Tip: Animal Sunt un câine 

Compilatorul poate apela automat constructorul no-arg. Cu toate acestea, nu poate apela constructori parametrizati.

Dacă trebuie chemat un constructor parametrizat, trebuie să-l definim în mod explicit în constructorul de subclasă.

Rețineți că, în exemplul de mai sus, am numit în mod explicit constructorul parametrizat super("Animal"). Compilatorul nu apelează constructorul implicit al superclasei în acest caz.

Articole interesante...