Tananyag‎ > ‎Objektumorientáció‎ > ‎

Öröklődés (inheritance)

Az osztályokat arra használtuk, hogy egy bizonyos típusú objektumcsoport működését definiáljuk. Ezek az objektumok ugyanúgy működtek. De megesik, hogy az objektumcsoportoknak vannak speciális alosztályai, amik egy picit másképp viselkednek.

Teglalap.java
public class Teglalap {
    public double a, b;
    public Teglalap(double a1, double b1) {
        a = a1;
        b = b1;
    }
    public double terulet() {
        return a*b;
    }
}


Negyzet.java
public class Negyzet extends Teglalap {
    public Negyzet(double a1) {
        super(a1, a1);
    }
    public double beirhatoKorSugara() {
        return a/2;
    }
}

Észrevételek:
  • MindenNegyzetTeglalapdenemmindenTeglalapNegyzet
  • A Negyzet egy alosztálya a Teglalapnak, ezt jelzi a public class Negyzet extends Teglalap
  • A Negyzet konstruktora a szülőosztály konstruktorára hivatkozik, ezt jelzi a super.

Nézzük tovább!

Main.java
public class Main {
    public static void main(String[] args) {
        Teglalap t = new Teglalap(2.0,3.0);
        Negyzet n = new Negyzet(5.0);
        System.out.println(t.terulet() + " " + n.terulet()); // A Négyzeteknek is van terulet() metódusa!
        
        Teglalap n2 = n;
        Negyzet n3 = (Negyzet) n2;

        Negyzet t2 = (Negyzet) t; // HIBÁS!!!

        System.out.println(n.beirhatoKorSugara());
        System.out.println(n2.beirhatoKorSugara()); // HIBÁS!!! – az n2-ről csak annyit tudunk, hogy Teglalap
        System.out.println(n.beirhatoKorSugara());
    }
}

Észrevételek:

  • A Negyzet tényleg Teglalap, mivel a Negyzeteknek is van terulet()-e
  • A Negyzetekre tudunk Teglalapként is hivatkozni.
    Teglalap n2 = new Negyzet(5);
    Ezt az átalakítást típuskonverziónak nevezzük. Ha alosztályra szeretnénk szülőosztálybeli elemként hivatkozni, nem kell jelölni a konverziót.
  • No de visszaalakító típuskonverziónál ki kell emelnünk, hogy egy átalakítás történik, mivel nem lehet akármilyen Teglalapra Negyzetkent hivatkozni, csak azokra, amiket Negyzetként hoztunk létre:
    Negyzet n3 = (Negyzet) n2; // Az n2 egy Negyzet marad, akárhogy is hivatkozunk rá.
    Negyzet t2 = (Negyzet) t; // HIBÁS!!! – A t soha nem volt Negyzet, nem is lehet azzá tenni.
  • Az n2-ről a kód írása közben, ha nem olvassuk a program értelmét, csak annyit tudunk, hogy egy Teglalap van benne, aminek nincs beirhatoKorSugara() nevű metódusa.
Comments