using System;
public class Test
{
interface Interfejs {
void metodaWirtualna();
}
class Klasa1 : Interfejs {
public void metodaWirtualna() {
Console.WriteLine("Klasa1");
}
}
class Klasa2 : Interfejs {
public virtual void metodaWirtualna() {
Console.WriteLine("Klasa2");
}
}
class Klasa3 : Klasa2 {
public override void metodaWirtualna() {
Console.WriteLine("Klasa3");
}
}
static void Wypisz(Interfejs obiekt) {
obiekt.metodaWirtualna(); // wirtualna czy nie wirtualna, oto jest pytanie!
}
public static void Main()
{
Wypisz(new Klasa1());
Wypisz(new Klasa2());
Wypisz(new Klasa3());
}
}
dXNpbmcgU3lzdGVtOwoKcHVibGljIGNsYXNzIFRlc3QKewoJaW50ZXJmYWNlIEludGVyZmVqcyB7CgkJdm9pZCBtZXRvZGFXaXJ0dWFsbmEoKTsKCX0KCQoJY2xhc3MgS2xhc2ExIDogSW50ZXJmZWpzIHsKCQlwdWJsaWMgdm9pZCBtZXRvZGFXaXJ0dWFsbmEoKSB7CgkJCUNvbnNvbGUuV3JpdGVMaW5lKCJLbGFzYTEiKTsKCQl9Cgl9CgkKCWNsYXNzIEtsYXNhMiA6IEludGVyZmVqcyB7CgkJcHVibGljIHZpcnR1YWwgdm9pZCBtZXRvZGFXaXJ0dWFsbmEoKSB7CgkJCUNvbnNvbGUuV3JpdGVMaW5lKCJLbGFzYTIiKTsKCQl9Cgl9CgkKCWNsYXNzIEtsYXNhMyA6IEtsYXNhMiB7CgkJcHVibGljIG92ZXJyaWRlIHZvaWQgbWV0b2RhV2lydHVhbG5hKCkgewoJCQlDb25zb2xlLldyaXRlTGluZSgiS2xhc2EzIik7CgkJfQoJfQoJCglzdGF0aWMgdm9pZCBXeXBpc3ooSW50ZXJmZWpzIG9iaWVrdCkgewoJCW9iaWVrdC5tZXRvZGFXaXJ0dWFsbmEoKTsgLy8gd2lydHVhbG5hIGN6eSBuaWUgd2lydHVhbG5hLCBvdG8gamVzdCBweXRhbmllIQoJfQoJCglwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpCgl7CgkJV3lwaXN6KG5ldyBLbGFzYTEoKSk7CgkJV3lwaXN6KG5ldyBLbGFzYTIoKSk7CgkJV3lwaXN6KG5ldyBLbGFzYTMoKSk7Cgl9Cn0=