Základ C# 12 – Dedičnosť [Inheritance]

Dedičnosť tried je vlastnosť dovoľujúca odvodiť novú triedu tak, aby bola založená na predošlej a zdieľala jej vlastnosti, metódy alebo premenné.

Pomocou dedičnosti môžeme zabezpečiť jednoduché odvodzovanie tried a odstránenie opakovania toho istého kódu. Okrem toho to dovoľuje rozširovanie už existujúcich tried a priradenie objektov rôznych typov k jednej premennej.

Základná trieda [base class]

Základná trieda je trieda, z ktorej odvodzujeme triedy – rodič. Základná trieda je obyčajná trieda, a tak je možné odvodzovať z akejkoľvek triedy, dokonca aj z už odvodenej triedy.

public class Stvorec
{
   double a;
   double b;
   double c;
   double d;

   public Stvorec(int strana)
   {
      a = strana;
      b = a;
      c = a;
      d = a;
   }

   public double vypocitajObvod()
   {
      return a+b+c+d;
   }
}

Toto by bola trieda, ktorá obsahuje metódu na vypočítanie obsahu štvorca a zadaním dĺžky strany ju automaticky priradí všetkým stranám. Viem že by bolo možné ukladať len jednu stranu a následne použiť return 4*a, ale pre tento príklad použijeme túto triedu.

Odvodenie triedy [class derivation]

Ďalším krokom je vytvoriť odvodenú triedu [derived class] – to sa robí použitím znaku : (dvojbodka) za meno odvodenej triedy a zadaním mena základnej triedy.

public class Obdliznik : Stvorec

Následne je možné písať triedu, ako vám to vyhovuje, pri čom môžete využívať už napísane metódy a premenné základnej triedy.

public class Obdlznik : Stvorec
{
   public Obdliznik(int dlzkaA, int dlzkaB) : base(dlzkaA)
   {
      b = dlzkaB;
      d = dlzkaB;
   }
}

V tomto príklade sme v konštruktore priradili premenným bd hodnotu strany B. Tieto premenné už boli definované v základnej triede, a tak ich môžeme použiť. čo je na konštruktore zvláštne, je použitie dvojbodky a slova base. To určuje, že rozširuje konštruktor pôvodnej triedy a ako parameter dostáva dlzkaA. Ak by sme kódy konštruktorov napísali tak ako sa vykonajú bolo by to :

a = dlzkaA;
b = dlzkaA;
c = dlzkaA;
d = dlzkaA;
b = dlzkaB;
d = dlzkaB;

Tým sme správne nastavili premenné. Ak by ste teraz niekde vytvorili objekt typu Obdlznik, mohli by ste použiť metódu vypocitajObvod, čo je metóda typu Stvorec. Tá by spočítala strani a,b,c,d z objektu a dala vám obvod obdĺžnika.

Zákaz odvoditeľnosti

Triede, ktorú vytvoríte, môžete zakázať odvoditeľnosť – tým pádom nieje možné túto triedu použiť ako základnú. Je to možné vynútiť použitím slova sealed.

sealed class Obdlznik
{
}

Objekty odvodených tried

Objekty odvodených tried sú úžasná vec a pomáhajú napríklad pri tvorbe API. Je totiž možné uložiť objekt typu odvodenej triedy, do premennej nadradeného typu.

Obdlznik obdlznik = new Obdlznik(4,6);
Stvorce stale_obdlznik = obdlznik;

Vytvorili sme si objekt typu Obdlznik a ten sme následne uložili do premennej typu Stvorec. Tento objekt v skutočnosti stále zostal typu Obdlznik a jeho metódy a premenné zostali zachované a funkčné. Na použitie sú však dostupné len tie metódy, ktoré už obsahoval aj typ Stvorec.

Priradiť je možné ja objekt rodičovského typu k nadradenému – tu už na radu prichádza tzv. pretypovanie [casting]. Pretypovanie prebieha zadaním mena nového typu do zátvoriek pred premennú.

Stvorec stvorec = new Stvorec(3);
Obdlznik obdlznik = (Obdlznik)stvorec;

Pri pretypovaní týmto smerom je nutné použiť zátvorky. Vy výsledku však tento objekt nemusí fungovať.

Toto bol prví diel o dedičnosti tried, v ktorom sme si ukázali ako sa dajú vytvoriť odvodené triedy a nabudúce budeme v dedičnosti pokračovať a povieme si niečo o Polymorfizme a Abstraktných triedach a metódach.

Pridajte Komentár

Vaša e-mailová adresa nebude zverejnená.

Scroll to Top