[C#] override와 new의 차이

virtual / override와 new 모두 다형성과 관련된 키워드이다.

1. virtual/override
virtual로 지정된 부모클래스의 메서드는 가상메서드가 된다. 이 메서드는 override로 지정된 같은 이름(같은 리턴형식, 같은 파라미터 형식)을 가진 자식 클래스의 메서드가 가려버린다.

[code language=”csharp”]
class Program
{
public static void Main(string[] args)
{
BaseClass instance = new SubClass1();

instance.Func1();
instance.Func2();
}
}

class BaseClass
{
public virtual void Func1()
{
Console.WriteLine("Base Func1");
}

public virtual void Func2()
{
Console.WriteLine("Base Func2");
}
}

class SubClass1 : BaseClass
{
public override void Func1()
{
Console.WriteLine("Sub1 Func1");
}

public override void Func2()
{
Console.WriteLine("Sub1 Func2");
}
}
[/code]

위의 코드는 다음을 출력한다.

[code language=”plain” gutter=”false”]
Sub1 Func1
Sub1 Func2
[/code]

비록 BaseClass instance1이지만 SubClass1으로 인스턴스를 만들었기 때문에 오버라이딩된 SubClass1의 Func1과 Func2를 실행시킨다. 메인메서드를 다음과 같이 고쳐도 실행결과는 똑같다.

[code language=”csharp”]
public static void Main(string[] args)
{
BaseClass instance1 = new SubClass1();

(instance1 as BaseClass).Func1();
(instance1 as BaseClass).Func2();
}
[/code]

override와 virtual은 꼭 짝을 이뤄야한다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다