나의 지식 보관소
메서드 오버라이딩 / 메서드 숨기기 본문
메서드 오버라이딩은 부모 클래스에서 정의한 메서드를 자식클래스에서 재정의 하는것을 말한다.
메서드 오버라이딩을 하기위해서는 부모 메서드의 오버라이딩할 메서드가 virtual로 수식되어있어야 하고, 자식 클래스에서는 오버라이딩을 할 메서드를 override로 수식해주면 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
class Animal
{
public virtual void Bark()
{
Console.WriteLine("짖는다.");
}
}
class Dog : Aniaml
{
public override void Bark()
{
Console.WriteLine("멍멍");
}
}
|
메서드 숨기기라는 것도 있다. 메서드 숨기기는 자식클래스에서 부모 클래스에 선언된 메서드와 같은 이름의 메서드를 new 키워드로 수식하여 선언하는 방법이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
class Animal
{
public void Bark()
{
Console.WriteLine("짖는다.");
}
}
class Dog : Aniaml
{
public new void Bark()
{
Console.WriteLine("멍멍");
}
}
|
메서드 오버라이딩과 메서드 숨기기는 겉보기에는 같아보이지만 큰 차이점이 있다.
위의 경우에는 두 방식 모두 같은 결과를 보이지만,
1
2
|
Animal dog = new Dog();
|
위와 같은 경우에는 메서드 오버라이딩에서는 "멍멍"을 출력하는 반면, 메서드 숨기기 방식에서는 "짖는다."가 출력된다. 말그대로 메서드 숨기기는 하위메서드에서 잠시 숨길뿐인 것이다.