Javna ključna beseda Java (z primeri)

V tej vadnici bomo s pomočjo primerov spoznali ključno besedo super v Javi.

Ključna superbeseda v Javi se uporablja v podrazredih za dostop do članov superklase (atributov, konstruktorjev in metod).

Preden se naučimo o superključni besedi, se prepričajte o dedovanju Java.

Uporabe super ključne besede

  1. Poklicati metode superrazreda, ki je razveljavljen v podrazredu.
  2. Dostop do atributov (polj) superrazreda, če imata tako podrazred kot podrazred atribute z istim imenom.
  3. Če želite iz konstruktorja podrazreda izrecno poklicati superrazred no-arg (privzeto) ali parametrizirani konstruktor.

Razumejmo vsako od teh uporab.

1. Dostop do nadomeščenih metod superrazreda

Če so metode z istim imenom opredeljene tako v superrazredu kot v podrazredu, metoda v podrazredu preglasi metodo v nadrazredu. To se imenuje preglasitev metode.

Primer 1: Preglasitev metode

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

Izhod

 Jaz sem pes 

V tem primeru lahko z izdelavo predmeta dog1 iz razreda Dog pokličemo njegovo metodo printMessage (), ki nato izvrši display()stavek.

Ker display()je opredeljena v obeh razredih, metoda podrazreda Dog preglasi metodo superrazreda Animal. Zato display()se imenuje podrazred.

Kaj pa, če je treba poklicati nadomeščeno metodo superrazreda?

Uporabljamo, super.display()če je display()treba poklicati nadomeščeno metodo superklase Animal.

Primer 2: Super to Call Superclass Method

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

Izhod

 Sem pes, žival sem 

Tukaj, kako deluje zgornji program.

2. Dostop do atributov superrazreda

Nadrazred in podrazred imata lahko atribute z istim imenom. Mi uporabljamo superbesedo za dostop do atribut nadrazreda.

Primer 3: Dostop do atributa superklase

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

Izhod :

 Sem sesalec, žival sem 

V tem primeru smo opredelili isti tip polja primera tako v superrazredu Animal kot v podrazredu Dog.

Nato smo ustvarili objekt dog1 iz razreda Dog. Nato se printType()metoda pokliče z uporabo tega predmeta.

Znotraj printType()funkcije,

  • type se nanaša na atribut podrazreda Dog.
  • super.tip se nanaša na atribut superklase Animal.

Torej, System.out.println("I am a " + type);grafike sem sesalec. In, System.out.println("I am an " + super.type);grafike Jaz sem žival.

3. Uporaba super () za dostop do konstruktorja superklase

Kot vemo, se pri ustvarjanju predmeta razreda samodejno pokliče njegov privzeti konstruktor.

Za izrecno klicanje konstruktorja superklase iz konstruktorja podrazreda uporabljamo super(). To je posebna oblika superključne besede.

super() se lahko uporablja samo znotraj konstruktorja podrazredov in mora biti prvi stavek.

Primer 4: Uporaba 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(); ) ) 

Izhod

 Sem žival, pes sem 

Tukaj, ko se ustvari objekt dog1 razreda Dog, samodejno pokliče privzeti konstruktor ali no-arg konstruktor tega razreda.

Znotraj konstruktorja podrazreda super()stavek pokliče konstruktor nadrazreda in izvrši stavke v njem. Tako dobimo rezultat Jaz sem žival.

Tok programa se nato vrne nazaj v konstruktor podrazreda in izvede preostale stavke. Tako bom pes natisnjen.

Vendar uporaba super()ni obvezna. Tudi če super()se ne uporablja v konstruktorju podrazreda, prevajalnik implicitno pokliče privzeti konstruktor nadrazreda.

Zakaj torej uporabljati odvečno kodo, če prevajalnik samodejno prikliče super ()?

Zahtevano je, če je treba iz konstruktorja podrazreda poklicati parametrizirani konstruktor (konstruktor, ki upošteva argumente) superrazreda.

Parametriziran super()mora biti vedno prvi stavek v telesu konstruktorja podrazreda, sicer dobimo napako pri sestavljanju.

Primer 5: Poklic parametriziranega konstruktorja z uporabo 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(); ) ) 

Izhod

 Tip: Žival Jaz sem pes 

Prevajalnik lahko samodejno pokliče konstruktor no-arg. Vendar ne more poklicati parametriziranih konstruktorjev.

Če je treba poklicati parametrizirani konstruktor, ga moramo izrecno definirati v konstruktorju podrazreda.

Upoštevajte, da smo v zgornjem primeru izrecno poklicali parametrizirani konstruktor super("Animal"). Prevajalnik v tem primeru ne pokliče privzetega konstruktorja superrazreda.

Zanimive Članki...