override 는 virtual 로 정의된 메서드만 재정의 가능
virtual 로 정의하더라도 override 가 없으면 new 생성자 뒤의 타입의 메서드가 호출됨.
new 로 정의하면 기존 메서드를 감춤. 단, base class 형에 derived class 로 생성하더라도 base class 의 메서드가 호출됨
C# 에서는 base 로 super class 를 참조함 (Java 에서의 super)
class ClassA { public void run() { Console.WriteLine("ClassA"); } }
class ClassB : ClassA { public void run() { Console.WriteLine("ClassB"); } }
class ClassC { public virtual void run() { Console.WriteLine("ClassC"); } }
class ClassD : ClassC { public override void run() { Console.WriteLine("ClassD"); } }
class ClassE { public void run() { Console.WriteLine("ClassE"); } }
class ClassF : ClassE { public new void run() { Console.WriteLine("ClassF"); } }
class Program
{
static int Main(string[] args)
{
ClassA aa = new ClassA();
ClassA ab = new ClassB();
ClassB bb = new ClassB();
aa.run();
ab.run();
bb.run();
ClassC cc = new ClassC();
ClassC cd = new ClassD();
ClassD dd = new ClassD();
cc.run();
cd.run();
dd.run();
ClassE ee = new ClassE();
ClassE ef = new ClassF();
ClassF ff = new ClassF();
ee.run();
ef.run();
ff.run();
Console.ReadKey();
return 1;
}
}
결과는?
ClassA
ClassA
ClassB
ClassC
ClassD
ClassD
ClassE
ClassE
ClassF