Java módszer felülírása

Ebben az oktatóanyagban példák segítségével megismerhetjük a Java-ban történő módszer felülírását.

Az utolsó bemutatóban megismertük az öröklést. Az öröklés egy olyan OOP tulajdonság, amely lehetővé teszi számunkra, hogy egy meglévő osztályból (szuperosztály) új osztályt (alosztályt) nyerjünk. Az alosztály örökli a szuperosztály tulajdonságait és módszereit.

Ha most ugyanazt a módszert definiáljuk a szuperosztályban és az alosztályban is, akkor az alosztály osztálya felülírja a szuperosztály módszerét. Ez az eljárás felülírása.

1. példa: Módszer felülbírálása

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

Kimenet :

 Egy kutya vagyok. 

A fenti programban a displayInfo()módszer az Állati szuperosztályban és a Kutya alosztályban egyaránt jelen van.

Amikor displayInfo()a d1 objektummal hívjuk meg (az alosztály objektuma), akkor a Kutya alosztályon belüli módszert hívjuk meg. Az displayInfo()alosztály módszere felülírja a szuperosztály azonos módszerét.

Figyelje @Overridemeg a példánkban az annotáció használatát . A Java-ban a kommentárok azok a metaadatok, amelyekkel információkat szolgáltattunk a fordítónak. Itt az @Overrideannotáció meghatározza a fordítót, hogy az ezen annotáció utáni módszer felülírja a szuperosztály módszerét.

Nem kötelező használni @Override. Amikor azonban ezt használjuk, a módszernek meg kell felelnie az felülbírálás minden szabályának. Ellenkező esetben a fordító hibát generál.

Java felülíró szabályok

  • A szuperosztálynak és az alosztálynak egyaránt meg kell adnia a metódus nevét, a visszatérési típust és a paraméterlistát.
  • Mi nem írhatja felül a metóduson finalés static.
  • Mindig felül kell írnunk a szuperosztály absztrakt módszereit (a későbbi oktatóanyagokban erről lesz szó).

szuper kulcsszó a Java felülírásában

A Java-ban felülírás végrehajtása közben felmerülő gyakori kérdés:

Hozzáférhetünk-e a szuperosztály módszeréhez felülbírálás után?

Nos, a válasz igen . A szuperosztály metódusának az alosztályból való eléréséhez a superkulcsszót használjuk .

2. példa: A szuper kulcsszó használata

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

Kimenet :

Állat vagyok. Egy kutya vagyok.

A fenti példában a Kutya alosztály felülírja az displayInfo()Állat szuperosztályú módszert .

Amikor a metódust displayInfo()a Kutya alosztály d1 objektumának felhasználásával hívjuk meg , akkor a Kutya alosztályon belüli metódust hívjuk meg; a szuperosztályon belüli módszert nem hívják meg.

A displayInfo()Kutya alosztály belsejében a szuperosztályt szoktuk super.displayInfo()hívni displayInfo().

Fontos megjegyezni, hogy a Java-ban lévő konstruktorok nem öröklődnek. Ennélfogva a Java-ban nincsen konstruktor felülírása.

Hívhatjuk azonban a szuperosztály konstruktorát annak alosztályaiból. Ehhez használjuk super(). További információkért keresse fel a Java super kulcsszót.

Hozzáférési specifikátorok a metódus felülírásában

A szuperosztályban és annak alosztályaiban deklarált ugyanazon módszer eltérő hozzáférési specifikációval rendelkezhet. Van azonban korlátozás.

Csak azokat az alosztályokat használhatjuk, amelyek nagyobb hozzáférést biztosítanak, mint a szuperosztály hozzáférési specifikációi. Például,

Tegyük fel, hogy myClass()a szuperosztályban egy módszert deklarálunk protected. Ezután myClass()az alosztályban ugyanaz a módszer lehet publicvagy protected, de nem private.

3. példa: Hozzáférés-specifikáció felülírásban

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

Kimenet :

 Egy kutya vagyok. 

A fenti példában a Kutya alosztály felülírja az displayInfo()Állat szuperosztályú módszert .

Amikor displayInfo()meghívjuk a d1 (alosztály objektuma) használatát, az alosztályon belüli módszert hívjuk meg.

Figyeljük meg, hogy a displayInfo()nyilvánították protectedaz Animal mikrotörzs. Ugyanez a módszer rendelkezik a publichozzáférés-specifikálóval a Kutya alosztályban. Ez azért lehetséges, mert a publichozzáférés nagyobb, mint a protected.

Az absztrakt módszerek felülírása

A Java-ban az absztrakt osztályokat más osztályok szuperosztályának alkotják. És ha egy osztály tartalmaz elvont módszert, akkor kötelező felülírni.

Az absztrakt osztályokról és az absztrakt módszerek felülbírálásáról a későbbi oktatóanyagok során többet megtudunk.

érdekes cikkek...