Kad apakšklase nodrošina īpašu ieviešanu metodei, kas jau ir definēta vecāku klasē, to sauc par metodes ignorēšanu. Pārmērīgai metodei apakšklasē jābūt tādiem pašiem nosaukuma parametriem un atgriešanas tipam kā metode vecāku klasē.
Noteikumi par metodes ignorēšanu
- Nosaukuma parametriem un atgriešanās veidam jāatbilst vecāku metodei.
- Java izvēlas, kuru metodi palaist izpildes laikā, pamatojoties uz faktisko objekta tipu, ne tikai uz atsauces mainīgā tipu.
- Statiskās metodes nevar ignorēt.
- Līdz @Orride anotācija Noķer kļūdas, piemēram, kļūdas metožu nosaukumos.
class Animal { void move(){ System.out.println( 'Animal is moving.'); } void eat(){ System.out.println( 'Animal is eating.'); } } class Dog extends Animal{ @Override void move(){ // move method from Base class is overriden in this // method System.out.println('Dog is running.'); } void bark(){ System.out.println('Dog is barking.'); } } public class Geeks { public static void main(String[] args) { Dog d = new Dog(); d.move(); d.eat(); d.bark(); } }
Izvade
Dog is running. Animal is eating. Dog is barking.
Paskaidrojums: Dzīvnieku klase definē tādas bāzes funkcijas kā kustēties () un Ēd () Apvidū Suņu klase manto no dzīvnieka un ignorēt kustības () metode, lai nodrošinātu īpašu uzvedību Suns skrien. Abas klases var piekļūt savām metodēm. Veidojot suņa objekta izsaukšanas kustību (), izpilda ignorēto metodi.
java apakšvirkne satur

Īpašie gadījumi, kas saistīti ar to
1. Zvanīšanas vecāku metode, izmantojot super
Līdz super atslēgvārds var atsaukties uz vecāku klases metodi no ignorēšanas metodes.
Javaclass Parent{ void show(){ System.out.println('Parent's show()'); } } class Child extends Parent{ @Override void show(){ super.show(); System.out.println('Child's show()'); } } public class Main{ public static void main(String[] args){ Parent obj = new Child(); obj.show(); } }
Izvade
Parent's show() Child's show()
2. Galīgās metodes nevar ignorēt
Ja mēs nevēlamies, lai metode tiktu ignorēta galīgais Apvidū Lūdzu, skatiet Izmantojot finālu ar mantojumu Apvidū
Javaclass Parent{ // Can't be overridden final void show(){ } } class Child extends Parent{ // This would produce error void show() {} }
Izvade :
3. Statiskās metodes
- Statiskās metodes nevar ignorēt; Statiskas metodes definēšana apakšklasē ar tādu pašu parakstu kā superklasē slēpj superklases metodi.
- Gadījumu metodes var tikt ignorētas, bet apakšklase nevar ignorēt superklases statisko metodi.
- Statiskā metode apakšklasē ar tādu pašu parakstu kā superklases statiskā metode slēpj sākotnējo metodi.
class Parent{ static void staticMethod(){ System.out.println('Parent static method'); } void instanceMethod(){ System.out.println('Parent instance method'); } } class Child extends Parent{ static void staticMethod(){ // Hides Parent's static method System.out.println('Child static method'); } @Override void instanceMethod(){ // Overrides Parent's instance method System.out.println('Child instance method'); } } public class GFG{ public static void main(String[] args){ Parent p = new Child(); // Calls Parent's static method (hiding) p.staticMethod(); // Calls Child's overridden instance method p.instanceMethod(); } }
Izvade
Parent static method Child instance method
4. Privātās metodes
- Privātās metodes nevar ignorēt, jo tās nav redzamas apakšklasēm.
- Apakšklases metode ar tādu pašu nosaukumu tiek uzskatīta par jaunu neatkarīgu metodi, kas nav saistīta ar vecāku klasi.
class Parent{ private void display(){ System.out.println('Parent private method'); } } class Child extends Parent{ void display(){ // This is a new method not overriding System.out.println('Child method'); } } public class GFG{ public static void main(String[] args){ Child c = new Child(); // Calls Child's method c.display(); } }
Izvade
Child method
5. Kovariantu atgriešanās veidi
- Metodes, kas ignorē pārsniegšanas metodes atgriešanas veidu, var būt pārmērīgas metodes atgriešanās veida apakšklase.
- Šī funkcija ir pazīstama kā kovarianta atgriešanās tips un apakšklasē ļauj specifiskākus atgriešanās veidus.
class Parent{ Parent getObject(){ System.out.println('Parent object'); return new Parent(); } } class Child extends Parent{ @Override // Covariant return type Child getObject() { System.out.println('Child object'); return new Child(); } } public class GFG{ public static void main(String[] args){ Parent obj = new Child(); // Calls Child's method obj.getObject(); } }
Izvade
Child object
Izņēmumu apstrāde, kas pārsniedz
- Galvenā metode nevar izmest jaunus vai plašākus pārbaudītus izņēmumus nekā superklases metode.
- Tas var mest mazāk vai šaurāk pārbaudītus izņēmumus.
- Tas var izmest visus nepārbaudītus izņēmumus (piemēram, RuntimeException) neatkarīgi no superklases metodes.
import java.io.IOException; class Parent { void display() throws IOException { System.out.println('Parent method'); } } class Child extends Parent { @Override void display() throws IOException { System.out.println('Child method'); } } public class GFG{ public static void main(String[] args){ // Parent reference Child object Parent obj = new Child(); try{ // Calls Child's overridden method obj.display(); } catch (IOException e){ System.out.println('Exception caught: ' + e.getMessage()); } } }
Izvade
Child method
Kāpēc mēs izmantojam metodes pārāk daudz?
- Mainīt vai uzlabot esošās metodes izturēšanos apakšklasē.
- Lai sasniegtu izpildlaika polimorfismu - metodes izsaukumi ir atkarīgi no faktiskā objekta veida.
- Lai atkārtoti izmantotu metodes nosaukumus, loģiski samazinot atlaišanu.
Reālās dzīves piemērs: darbinieku pārvaldības sistēma
Izprotim ignorēšanu ar reālās pasaules analoģiju.
Iedomājieties organizācijas darbinieku pārvaldības sistēmu. Visiem darbiniekiem ir kāda izturēšanās, piemēram, Reseisealary () un veicina (), bet loģika atšķiras dažādām lomām, piemēram, pārvaldniekam vai inženierim. Mēs varam izveidot vienu darbinieku masīvu, kurā atsevišķi darbinieki ir dažāda veida (pārdošanas tehnika utt.) Un sauc par viņu funkcijām. Tas daudz vienkāršo kopējo kodu.
Javaabstract class Employee { abstract void raiseSalary(); abstract void promote(); } class Manager extends Employee{ @Override void raiseSalary(){ System.out.println( 'Manager salary raised with incentives.'); } @Override void promote(){ System.out.println( 'Manager promoted to Senior Manager.'); } } class Engineer extends Employee{ @Override void raiseSalary(){ System.out.println( 'Engineer salary raised with bonus.'); } @Override void promote(){ System.out.println( 'Engineer promoted to Senior Engineer.'); } } public class Company{ public static void main(String[] args){ Employee[] employees = { new Manager() new Engineer() }; System.out.println('--- Raising Salaries ---'); for (Employee e : employees){ e.raiseSalary(); } System.out.println('n--- Promotions ---'); for (Employee e : employees) { e.promote(); } } }
Izvade
--- Raising Salaries --- Manager salary raised with incentives. Engineer salary raised with bonus. --- Promotions --- Manager promoted to Senior Manager. Engineer promoted to Senior Engineer.
Paskaidrojums: Lai gan gan pārvaldnieka, gan inženieru objekti tiek minēti, izmantojot darbinieka tipa, Java izsauc faktisko objektu ignorētās metodes izpildlaikā, dinamiskas metodes nosūtīšanas (izpildlaika polimorfisms).
git komandas push
Saistītais raksts: Metodes pārslodze un metodes ignorēšana