namespace ObiektowaTeoria { // Klasa bazowa public class Zwierze { /* virtual umieszczamy przy deklaracji metody w klasie bazowej, aby zaznaczyć, że ta metoda może być nadpisana w klasach pochodnych. bez virtual metody nie pozwalają na dynamiczne przesłonięcie. */ public virtual void WydajDzwiek() { Console.WriteLine("Zwierzę wydaje dźwięk."); } } // Klasa pochodna public class Kot : Zwierze { /* override używamy w klasie dziedziczącej, aby powiadomić kompilator oraz środowisko uruchomieniowe, że metoda zamierzenie przesłania wersję metody wirtualnej z klasy bazowej. Pozwala to na dynamiczne wywołanie właściwej dla konkretnego typu metody, nawet jeśli odwołujemy się do obiektu przez zmienną typu bazowego. */ public override void WydajDzwiek() { Console.WriteLine("Miau"); } } // Zobacz plik Program.cs:16 jak używać tych klas }