Under arv, när en metoddefinition harsamma metodsignatur (metodnamn + parametersignatur) och returtyp i en underklass som dess superklass, då sägs metoden i underklassen åsidosätta metoden för dess superklass och mekanismen kallas Method Overriding.
Har skapats objekt för underklassen, närden åsidosatta metoden kallas då objektet för underklass hänvisar till metoden som definieras i underklassen som betyder att den åsidosatta metoden som definieras i superklassen kommer att döljas. För att få tillgång till den åsidosatta metoden som definieras i superklassen kan åtkomst av underklassen med hjälp av 'super' nyckelord.
I OOP är Method Overriding en funktion som låterunderklass definierar specifik implementering av metod som redan definieras i en av dess superklasser. Bland de åsidosatta metoderna kommer vilken version av metoden att kallas bestämmas av det åkallande objektet vid körning. Det är vad det heter Polymorfism i körtid Eftersom överdrivna metoder implementerar "ett gränssnitt, multipel användning" aspekt av polymorfism.
Vid åsidosättande av metod löser Java-körtidssystem metodkallingen dynamiskt vid körtid, så kallad Sen bindning.
Funktioner vid metoderöverskridande
- Åtkomstnivån för den övervägande metoden i underklass kan inte vara mer begränsande än den åsidosatta metoden för superklassen.
- Metoderna sägs överstiga varandra när det finns en förälder-barn-relation mellan klasserna.
- Privata och slutliga metoder kan inte åsidosättas.
- Statiska metoder kan inte åsidosättas utan kan deklareras på nytt.
- Offentliga eller skyddade icke-slutgiltiga metoder för ett paket kan endast åsidosättas av dess underklass som finns i något annat paket.
- Konstruktörer kan inte åsidosättas.
- Överordnade kan kasta alla undantagna undantag.
fördelar
Stödjer specialisering d.v.s. under arv när en underklass ärver en överordnad klass, då kommer underklass att ha alla funktioner i överordnad klass och på toppen av den underklassen kan implementera specifik funktionalitet till den övervägande metoden med samma metodsignatur och returtyp som samma som i dess superklass.
Java-program
class Animal{ void sound(){ System.out.println("default sound..."); } } class Cat extends Animal{ void sound(){ System.out.println("mew mew..."); } } class Dog extends Animal{ void sound(){ System.out.println("vow vow..."); } } class MethodOverrideDemo{ public static void main(String args[]){ Cat cat = new Cat(); Dog dog = new Dog(); System.out.println("--------Cat--------"); cat.sound(); System.out.println("--------Dog--------"); dog.sound(); } }
Produktion
Förklaring av kod och utdata
I exemplet ovan är hund och katt bådaunderklasser som härrör från Animal super-klass. I alla klasser (förutom MethodOverrideDemo-klassen) hittar du metodljudet (), som definieras under djurklass på ett generiskt sätt och i katt- och hundklassen har åsidosatt ljudmetoden () -metoden för djurklass med specifik implementering enligt scenariot . Uppenbarligen är Cat's ljud "mew mew ..." och det av hundens "vow vow ..." -ljud () definieras i dessa klasser efter behov. Om vi skapar objekt av klass Cat, kommer det att åberopa ljud () -metod för Cat-klass, detsamma gäller för objekt av Dog-klass. Jag antar att allt från utgången är klart.
Kolla in mer användbara handledning och definitiva riktlinjer för Java-programmering här.
kommentarer