NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Funkce, kterou se snažíš použít je dostupná pouze pro registrované uživatele. Buďto se přihlas nebo si zdarma vytvoř nový účet.

Diskuze – Lekce 7 - Dědičnost a polymorfismus

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
David
Člen
Avatar
Odpovídá na Nositelka Změny
David:13.1.2020 22:07

Ahoj, myslím že dceřiná třída je v rámci češtiny naprosto v pořádku. Správně je to asi: base class a derived class, neboli základní a odvozená třída. Často se taky používá parent a child. Nedávno jsem ale četl knížku o css a tam používali velmi často termín dceřiný element, myšleno jako přímý potomek, na rozdíl od obecného potomka, který může být v hierarchii hlouběji.

Na druhou otázku je odpověď ano, pochopila jsi to správně. Privátní membery jsou také zděděni, ale nejsou přístupní. Přes public/internal/pro­tected metody base třídy k ním ale přístup možný je.

 
Odpovědět
13.1.2020 22:07
Avatar
Odpovídá na David
Nositelka Změny:14.1.2020 21:34

Tak to jsem ráda, že jsem si dceřinou třídu nevymyslela úplně i že to chápu dobře. :-)

Odpovědět
14.1.2020 21:34
j.k.j
Avatar
Jirka Jr
Člen
Avatar
Odpovídá na Nositelka Změny
Jirka Jr:15.1.2020 12:39

a to jsme ještě nezabloudili do traitů :-)

to si ale radši v lidském provedení ani nechci představovat...

možná by tato přirovnání mohla zpětně inspirovat k tvorbě sci-fi

 
Odpovědět
15.1.2020 12:39
Avatar
David
Člen
Avatar
David:13.4.2020 21:41

Díky za článek. ;-)

 
Odpovědět
13.4.2020 21:41
Avatar
Martin Riecky:19.8.2020 19:33

Ahojte. Mám dotaz. Podľa čoho zvoliť, či použiť dedičnosť alebo polymorfyzmus? Je na to nejaká metodika (okrem výnimky viacnásobného "dedenia")?
Chcem tým povedať, že v potomkoch sa dokážu metódy prekryť (neviem, či dokonca v rodičovskej triede nevieme definovať abstraktnú metódu, ktorú treba povinné prekryť).
Mám v tom celkom hmlisto.
Ďakujem.

 
Odpovědět
19.8.2020 19:33
Avatar
Martin Riecky:19.8.2020 19:50

Ešte ma napadá, že ak má trieda veľká metód a premenných, ktoré štandardne nepotrebujeme, vtedy by sa dal použiť polymorfyzmus.

 
Odpovědět
19.8.2020 19:50
Avatar
Martin Riecky:20.8.2020 17:44

Beriem zatiaľ späť. V podstate som sa pýtal na dedičnosť a interface. Ale snáď sa to dozviem neskôr.

 
Odpovědět
20.8.2020 17:44
Avatar
barnabas.666
Člen
Avatar
barnabas.666:21.3.2021 19:37

Měl bych drobný dotaz ke kódu zmíněnému v této lekci.

Uzivatel u = new Administrator("Josef Nový", 25);
if (u is Administrator)
    Console.WriteLine("Je to administrátor");
else
    Console.WriteLine("Je to uživatel");

Pomocí operátoru "is" se můžeme zeptat, zda je objekt daného typu. Kód výše otestuje, zda je v proměnné u uživatel nebo jeho potomek administrátor.

Výstup výše zmíněného prográmku je:

Je to administrátor

Pokud udělám v programu drobnou změnu (jen zaměním ten řádek s else):

Uzivatel u = new Administrator("Josef Nový", 25);
if (u is Administrator)
    Console.WriteLine("Je to administrátor");
if (u is Uzivatel)
    Console.WriteLine("Je to uživatel");

Tak je výstup následující:

Je to administrátor
Je to uživatel

Nevím, možná si stojím na vedení, ale mně nepřipadá, že bych pomocí operátoru "is" poznal, zda je v proměnné u uživatel nebo jeho potomek administrátor. Pokud na to u pustím GetType, tak se přizná, že je administrátor, ale s využitím "is" mi přijde odpověď poněkud vyhýbavá.

 
Odpovědět
21.3.2021 19:37
Avatar
Jiří Pivec
Člen
Avatar
Jiří Pivec:1.11.2021 19:21

Ahoj, na vedení si nestojíš, viz referenční příručku:
https://docs.microsoft.com/…ing-and-cast#…
Operátor is vrací true pokud je instance v dědičném stromu.
Takže v tomto případě:

Uzivatel a = new Administrator();
Console.WriteLine(a is Uzivatel);           //true
Console.WriteLine(a is Administrator);      //true

Uzivatel u = new Uzivatel();
Console.WriteLine(u is Uzivatel);           //true
Console.WriteLine(u is Administrator);      //false

ještě jeden odkaz:
https://stackoverflow.com/…ettype-or-is

Odpovědět
1.11.2021 19:21
„Kdo se umí smát sám sobě, má právo se smát všemu ostatnímu, co mu k smíchu připadá.“ J.W.
Avatar
Jaroslav Drobek:2.8.2022 19:26

Hodnocení:

  • Potomek se k privátnímu atributu může (nepřímo) dostat/přepsat jej přes vhodnou public metodu.
  • "Pomocí operátoru is se můžeme zeptat, zda je objekt daného typu." - spíše zda objekt vyhovuje rozhraní dané třídy, tj. zda by mohl být její instancí.
Editováno 2.8.2022 19:26
 
Odpovědět
2.8.2022 19:26
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 47.