- polymorfizmus
- poly - mnoho
- morfizmus - tvarost, tvarování
- = mnohotvarost, různorodost
- používáme v případě, kdy chceme zajistit různé chování metod potomků některé třídy
- souvisí s virtuálními a přepsanými metodami (klíčová slova virtual a override)
- vychází z předpokladu, že můžeme odkazovat na zděděný typ pomocí typu rodiče
- Rodic b = new Potomek()
- toto chování je přítomno ve všech moderních OOP jazycích a umožňuje nám například ukládat rodiče a potomky společně do pevně typovaných kolekcí a polí
1: using System;
2: using System.Collections.Generic;
3: using System.Text;
4:
5: namespace TeoriePolymorfizmus
6: { 7: class Rodic
8: { 9: public void nevirtualniMetoda()
10: { 11: Console.WriteLine("Jsem nevirtualni metoda rodice"); 12: }
13:
14: public virtual void virtualniMetoda()
15: { 16: Console.WriteLine("Jsem virtualni metoda rodice"); 17: }
18: }
19:
20: class Potomek : Rodic
21: { 22: public void nevirtualniMetoda()
23: { 24: Console.WriteLine("Jsem nevirtualni metoda potomka"); 25: }
26:
27: public override void virtualniMetoda()
28: { 29: Console.WriteLine("Jsem prepsana metoda"); 30: }
31:
32: }
33:
34: class Program
35: { 36: static void Main(string[] args)
37: { 38:
39: Potomek a = new Potomek();
40: a.nevirtualniMetoda();
41: a.virtualniMetoda();
42:
43: Rodic b = new Potomek();
44: b.nevirtualniMetoda();
45: b.virtualniMetoda();
46:
47: /* Vystup bude:
48: *
49: * Jsem nevirtualni metoda potomka
50: * Jsem prepsana metoda
51: * Jsem nevirtualni metoda rodice
52: *
53: * // neni totiz jasne zda volame metodu rodice nebo potomka,
54: * zavola se proto metoda rodice i presto ze sme vytvareli objekt
55: * potomka
56: *
57: * Jsem prepsana metoda
58: *
59: * // tady uz se zavola metoda potomka, protoze jsme ji spravne prepsali
60: */
61:
62: Console.ReadLine();
63:
64: }
65: }
66: }
Žádné komentáře:
Okomentovat