CLR에게 기반 클래스에서 구현된 버전의 메소드를 감추고 파생 클래스에서 구현된 버전만을 보여주는 것을 메소드 숨기기(method hiding)라고 말합니다.
메소드 숨기기
메소드 숨기기는 자식 클래스(파생 클래스)의 메소드를 new 키워드
로 한정함으로써 할 수 있습니다. 생성자를 호출할 때 사용하는 new 연산자와는 다른 것입니다.
class Item
{
public void Using()
{
Console.WriteLine("Item.Uinsg()");
}
}
class Posion : Item
{
public new void Using()
{
Console.WriteLine("Posion.Using()");
}
}
class MainApp
{
public static void Main(string[] args)
{
Posion item = new Posion();
item.Using();
}
}
출력 결과 Posion.Using() |
위와 같이 new 키워드로 부모 클래스(기반 클래스)의 메소드를 숨기고 자식 클래스(파생 클래스)의 메소드를 호출할 수 있습니다.
메소드 숨기기를 통해 오버라이딩과 같은 효과를 얻을 수 있습니다. 하지만 메소드 숨기기는 오버라이딩과 다릅니다.
class Item
{
public void Using()
{
Console.WriteLine("Item.Uinsg()");
}
}
class Posion : Item
{
public new void Using()
{
Console.WriteLine("Posion.Using()");
}
}
class MainApp
{
public static void Main(string[] args)
{
Item item = new Posion();
item.Using();
}
}
출력 결과 Item.Using() |
위와 같이 item 객체를 선언하면 부모 클래스(기반 클래스)의 메소드가 실행됩니다. 이처럼 메소드 숨기기는 완전한 다형성을 표현하지 못하는 한계를 갖고 있습니다.