TOC

This article has been localized into Hungarian by the community.

Osztályok:

Öröklődés

Az Objektum-Orientált Programozás (OOP), és ezáltal a C# nyelv egyik alapköve az öröklődés, amivel új osztályokat írhatunk úgy, hogy azok bizonyos dolgokat átvesznek egy másik osztálytól. Az egész .NET keretrendszer erre épül, aminek az az eredménye, hogy minden objektumként van kezelve. Még egy egyszerű számérték is egy osztály példánya, ami a System.Object osztálytól örököl. Persze a keretrendszer segít neked kicsit, és közvetlen használhatsz számokat, ahelyett, hogy például az integer osztály új példányát kéne minden alkalommal létrehoznod.

Egy kicsit nehéz lehet elsőre megérteni az öröklődés koncepcióját, ezért előnyös azt példán keresztül illusztrálni. Kezdjük is egy egyszerűvel:

public class Animal
{
    public void Greet()
    {
        Console.WriteLine("Hello, I'm some sort of animal!");
    }
}

public class Dog : Animal
{

}

Először definiálunk egy Animal (állat) osztályt, ami egy egyszerű metódussal rendelkezik, egy üdvözlés kiírására (Greet). Ezután definiálunk egy Dog (kutya) osztályt is, majd kettőspont segítségével megadjuk, hogy a Dog osztály az Animal osztálytól kell örököljön. A legszebb ebben, hogy ennek a kapcsolatnak a való élet vetületében is tökéletes értelme van - egy kutya természetesen egyfajta állat. Használjuk most ezeket az osztályokat:

Animal animal = new Animal();
animal.Greet();
Dog dog = new Dog();
dog.Greet();

Ha futtatod a fenti példát, láthatod, hogy ugyan a Dog osztályon nem definiáltunk Greet() metódust, de ugyanúgy tudja, hogyan köszönjön nekünk, mivel ezt a metódust örökli az Animal osztálytól. Ez a köszönés azonban kicsit túl általános, ezért írjunk valami kutyához illőbbet:

public class Animal
{
    public virtual void Greet()
    {
        Console.WriteLine("Hello, I'm some sort of animal!");
    }
}

public class Dog : Animal
{
    public override void Greet()
    {
        Console.WriteLine("Hello, I'm a dog!");
    }
}

Az Dog osztályon lévő új metódust mellett két dolgra kell felfigyelned: az Animal osztály metódusához a virtual, a Dog osztályon pedig az override kulcsszót tettem hozzá.

Ezzel felülírtuk az eredeti metódust. C#-ban nem írhatod felül (override) egy osztály tagját, ha az nincs virtualként megjelölve. Ha szeretnéd, még a felülírás mellett is hozzáférhetsz az alap verzióhoz a base kulcsszó használatával.

public override void Greet()
{
    base.Greet();
    Console.WriteLine("Yes I am - a dog!");
}

Nem csak metódusok öröklődnek. Lényegében minden az osztályon lévő tag öröklődik az új osztályra, mezőket és tulajdonságokat is beleértve. Pusztán a láthatósági szintek szabnak ennek korlátot, ahogy azokat egy korábbi cikkben láttuk.

Az öröklődés nem csak egy osztályból a másikig érvényes - egész osztályhierarchiád lehet, amelyek sorban örökölnek egymástól. Például írhatsz egy Puppy (kiskutya) osztályt, ami a Dog osztálytól örököl, ami pedig az Animal osztálytól örököl. Amit viszont C#-ban nem tehetsz, az az, hogy egy osztály önmagában, közvetlen több osztálytól örököljön. Ezt más nyelvekben többszörös öröklődésnek hívják.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!