이번에는 메서드 오버라이드 예제를 하나 만들어 보겠습니다.
> class Parent //① 부모 클래스 생성 . { . //virtual: 재정의해서 사용하도록 허용 . public virtual void Work() => Console.WriteLine("프로그래머"); . } > > class Child : Parent //② 자식 클래스 생성 . { . public override void Work() => Console.WriteLine("프로게이머"); . } > > (new Parent()).Work(); //ⓐ 부모 클래스의 인스턴스 생성 프로그래머 > (new Child()).Work(); //ⓑ 자식 클래스의 인스턴스 생성 프로게이머
Parent 클래스에서 이미 Work()란 이름으로 선언된 메서드를 Child 클래스에서 동일한 이름인 Work() 메서드로 다시 정의해서 새로운 기능으로 사용하고 있습니다. 이를 메서드 오버라이드 또는 메서드 오버라이딩이라고 합니다. 부모 클래스인 Parent의 Work() 메서드를 호출하면 “프로그래머”가 출력되고 자식 클래스인 Child 클래스의 재정의된 Work() 메서드를 호출하면 “프로게이머”가 출력됩니다. 메서드 오버라이드를 구현할 때 가장 이상적인 코드 형태는 부모 클래스에 virtual이 붙은 메서드를 자식 클래스에서 override 키워드를 붙여 다시 정의해서 사용하겠다고 명확하게 지정하는 것입니다.