Programming/C# (vs Java)

virtual, override, base

Lawmin 2012. 11. 19. 19:58

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