„Java“ metodo nepaisymas

Šioje pamokoje su pavyzdžių pagalba sužinosime apie „Java“ metodo viršijimą.

Paskutinėje pamokoje sužinojome apie paveldėjimą. Paveldėjimas yra OOP ypatybė, leidžianti iš naujos klasės (poklasio) išvesti iš esamos klasės (superklasės). Poklasis paveldi superklasės atributus ir metodus.

Dabar, jei tas pats metodas yra apibrėžtas ir superklasėje, ir poklasyje, tada poklasio metodas viršija superklasės metodą. Tai vadinama svarbesniu metodu.

1 pavyzdys: metodo nepaisymas

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

Išvestis :

 Aš esu šuo. 

Ankstesnėje programoje displayInfo()metodas yra ir gyvūnų superklasėje, ir šuns poklasyje.

Kai mes skambiname displayInfo()naudodami objektą d1 (poklasio objektą), vadinamas poklasio šuns metodas. displayInfo()Poklasio metodas yra viršesnis tą patį metodą superclass.

Atkreipkite dėmesį į @Overrideanotacijos naudojimą mūsų pavyzdyje. „Java“ sistemoje anotacijos yra metaduomenys, kuriuos naudojome teikdami informaciją kompiliatoriui. Čia @Overrideanotacija nurodo kompiliatorių, kad metodas po šios anotacijos viršija superklasės metodą.

Tai nėra privaloma naudoti @Override. Tačiau kai mes tai naudojame, metodas turėtų atitikti visas svarbesnes taisykles. Priešingu atveju kompiliatorius sugeneruos klaidą.

„Java“ viršijančios taisyklės

  • Tiek superklasė, tiek poklasis turi turėti tą patį metodo pavadinimą, tą patį grąžinimo tipą ir tą patį parametrų sąrašą.
  • Mes negalime nepaisyti metodo, deklaruoto kaip finalir static.
  • Mes visada turėtume nepaisyti abstrakčių superklasės metodų (bus aptarti vėlesnėse pamokose).

„Super Java“ svarbiausias raktinis žodis

Dažnas klausimas, kylantis vykdant nepaisomą „Java“, yra:

Ar galime nepaisyti superklasės metodo?

Na, atsakymas yra „ Taip“ . Norėdami pasiekti superklasės metodą iš poklasio, naudojame superraktinį žodį.

2 pavyzdys: „Super Keyword“ naudojimas

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

Išvestis :

Aš gyvūnas. Aš esu šuo.

Ankstesniame pavyzdyje šuns poklasis viršija displayInfo()gyvūno superklasės metodą .

Kai metodą iškviečiame displayInfo()naudodami šuns poklasio objektą d1, vadinamas metodas šuns poklasyje; metodas superklasėje nėra vadinamas.

displayInfo()„Šuns“ poklasio viduje mes įpratome super.displayInfo()skambinti displayInfo()superklasei.

Svarbu pažymėti, kad „Java“ konstruktoriai nėra paveldimi. Vadinasi, „Java“ sistemoje nėra svarbesnio konstruktoriaus.

Tačiau superklasės konstruktorių galime vadinti iš jo poklasių. Tam mes naudojame super(). Norėdami sužinoti daugiau, apsilankykite „Java super keyword“.

Prieigos specifikacijos metodo viršijime

Tas pats būdas, nurodytas superklase ir jo poklasiuose, gali turėti skirtingus prieigos specifikatorius. Tačiau yra apribojimas.

Galime naudoti tik tuos poklasių prieigos specifikatorius, kurie suteikia didesnę prieigą nei viršutinės klasės prieigos specifikatorius. Pavyzdžiui,

Tarkime, myClass()deklaruojamas metodas superklase protected. Tada tas pats myClass()poklasio metodas gali būti publicarba protected, bet ne private.

3 pavyzdys: Prieigos specifikatorius nepaisant

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

Išvestis :

 Aš esu šuo. 

Ankstesniame pavyzdyje šuns poklasis viršija displayInfo()gyvūno superklasės metodą .

Kai skambiname displayInfo()naudodami d1 (poklasio objektą), vadinamas poklasio metodas.

Atkreipkite dėmesį, kad displayInfo()tai yra deklaruota protectedgyvūnų klasėje. Tas pats metodas turi publicprieigos specifikatorių šuns poklasyje. Tai įmanoma, nes publicsuteikia didesnę prieigą nei protected.

Svarbiausi abstraktūs metodai

„Java“ sistemoje abstrakčios klasės yra sukurtos kaip kitų klasių superklasė. Ir jei klasėje yra abstraktus metodas, privaloma jį nepaisyti.

Vėliau pateiktose pamokose sužinosime daugiau apie abstrakčias klases ir abstrakčių metodų nepaisymą.

Įdomios straipsniai...