Kai poklasis pateikia specifinį metodą, kuris jau yra apibrėžtas jo pagrindinėje klasėje, jis vadinamas metodu, kuris yra svarbus. Nepaisomas poklasio metodas turi būti tas pats pavadinimo parametrai ir grąžinimo tipas kaip ir metodas pagrindinėje klasėje.
Metodo, kuris viršija, taisyklės
- Vardo parametrai ir grąžinimo tipas turi atitikti pagrindinį metodą.
- „Java“ pasirenka, kurį metodą vykdyti vykdymo metu, atsižvelgiant į tikrąjį objekto tipą, o ne tik atskaitos kintamojo tipą.
- Statiniai metodai negali būti nepaisomi.
- @Override anotacija Gauna klaidas, tokias kaip rašybos klaidos metodo pavadinimuose.
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(); } }
Išvestis
Dog is running. Animal is eating. Dog is barking.
Paaiškinimas: Gyvūnų klasė apibrėžia bazines funkcijas kaip judėti () ir valgyti () . Šunų klasė paveldi iš gyvūno ir nepaisymas MOKTO () metodas, skirtas užtikrinti konkretų elgesį Šuo bėga. Abi klasės gali pasiekti savo metodus. Kurdamas šuns objekto skambučio judėjimą () vykdo nepaisomą metodą.

Specialūs atvejai viršuje
1. Tėvų metodo skambinimas naudojant super
Super raktinis žodis Gali ištarti pagrindinės klasės metodą iš svarbiausio metodo.
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(); } }
Išvestis
Parent's show() Child's show()
2. Galutiniai metodai negali būti nepaisomi
Jei nenorime, kad metodas būtų panaikintas, mes deklaruojame jį kaip galutinis . Prašau pamatyti Naudojant galutinį paveldėjimą .
kas yra internetasJava
class Parent{ // Can't be overridden final void show(){ } } class Child extends Parent{ // This would produce error void show() {} }
Išvestis :
3. Statiniai metodai
- Statiniai metodai negali būti nepaisomi; Statinio metodo apibrėžimas poklase su tokiu pačiu parašu kaip ir superklasė slepia superklasės metodą.
- Pavyzdžių metodai gali būti nepaisomi, tačiau poklasis negali nepaisyti superklasės statinio metodo.
- Statinis metodas poklase su tokiu pat parašu kaip ir superklasinis statinis metodas slepia pradinį metodą.
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(); } }
Išvestis
Parent static method Child instance method
4. Privatūs metodai
- Privatūs metodai negali būti nepaisomi, nes jie nėra matomi poklasiniams.
- Poklasinio metodas tuo pačiu pavadinimu yra traktuojamas kaip naujas nepriklausomas metodas, nesusijęs su tėvų klase.
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(); } }
Išvestis
Child method
5. Kovarianto grąžinimo tipai
- Taikant metodą, viršijančio viršutinio metodo grąžinimo tipą, gali būti nepertraukiamo metodo grąžinimo tipo poklasis.
- Ši funkcija yra žinoma kaip „Covariant Return Type“ ir leidžia paprastesnius grąžinimo tipus poklase.
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(); } }
Išvestis
Child object
Išimčių tvarkymas viršuje
- Svarbiausias metodas negali mesti naujų ar platesnių patikrintų išimčių nei superklase metodas.
- Tai gali išmesti mažiau ar siauresnių patikrintų išimčių.
- Tai gali mesti bet kokias nepatikrintas išimtis (pvz., „RunTimeException“), nepaisant superklasės metodo.
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()); } } }
Išvestis
Child method
Kodėl mes naudojame metodą, kuris yra svarbus?
- Pakeisti ar sustiprinti esamo metodo elgesį poklase.
- Norint pasiekti vykdymo laiko polimorfizmą - metodo skambučiai priklauso nuo faktinio objekto tipo.
- Pakartotinai naudoti metodo pavadinimus logiškai mažinant atleidimą.
Realaus gyvenimo pavyzdys: darbuotojų valdymo sistema
Supraskime, kad tai yra realaus pasaulio analogija.
Įsivaizduokite organizacijos darbuotojų valdymo sistemą. Visi darbuotojai turi tam tikrą elgesį, pavyzdžiui, „Raisesalary“ () ir reklamuoja (), tačiau logika skiriasi skirtingais vaidmenimis, tokiais kaip vadovas ar inžinierius. Mes galime sukurti vieną darbuotojų masyvą, kuriame atskiri darbuotojai yra skirtingų tipų (pardavimo technologijos ir tt) ir paskambinti jų funkcijoms. Tai daug supaprastina bendrą kodą.
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(); } } }
Išvestis
--- Raising Salaries --- Manager salary raised with incentives. Engineer salary raised with bonus. --- Promotions --- Manager promoted to Senior Manager. Engineer promoted to Senior Engineer.
Paaiškinimas: Nors tiek vadovo, tiek inžinieriaus objektai yra nurodomi naudojant darbuotojo tipą „Java“, vadina faktinių objektų, esančių „Runtime“, metodus, rodančius dinaminio metodo išsiuntimą (vykdymo laiko polimorfizmas).
Susijęs straipsnis: Metodo perkrovimas ir metodas, viršijantis