C# 프로그래밍 - 메서드 오버라이딩(override)

반응형

C# 프로그래밍 - 메서드 오버라이딩(override)

부모 클래스(또는 기반 클래스)에서 정의된 메서드를 자식 클래스(파생 클래스)에서 재정의할수있습니다. 
메서드 오버라이딩을 사용하면 런타임 다형성(Polymorphism)을 구현할수있습니다(기반 클래스는 파생 클래스를 통해서 다형성을 구현)
부모 클래스 메서드 정의
메서드를 오버라이드하려면 부모 클래스에서 virtual 키워드를 사용하여 메서드를 정의합니다.
자식 클래스 메서드 재정의
자식 클래스에서 override 키워드를 사용하여 부모 클래스에서 정의된 메서드를 재정의합니다.

메서드 오버라이딩 예시
Animal 클래스의 가상 메서드 Speak에서 기본 동작을 정의합니다.
class Animal
{
    public virtual void Speak()
    {
        Console.WriteLine("The animal makes a sound.");
    }
}


Animal 클래스를 상속받는 Dog 클래스와 Cat 클래스에서 Speak 메서드를 각각 오버라이드하여 고유한 동작을 구현합니다.
class Dog : Animal
{
    public override void Speak()
    {
        Console.WriteLine("The dog barks.");
    }
}

class Cat : Animal
{
    public override void Speak()
    {
        Console.WriteLine("The cat meows.");
    }
}


Main 메서드에서 Animal 타입의 변수에 Dog와 Cat 객체를 할당하고 Speak 메서드를 호출하면 각각 고유한  동작을 실행합니다.
class Program
{
    static void Main()
    {
        Animal myDog = new Dog();
        Animal myCat = new Cat();

        myDog.Speak(); //The dog barks.
        myCat.Speak(); //The cat meows.
    }
}

 

 

 

메서드 숨기기(hiding)

부모 클래스의 메서드가 virtual 키워드를 사용하지않은 경우 자식 클래스에서 동일한 이름과 매개변수를 가진 메서드를 선언하면 숨김(hiding)이 발생합니다. 자식 클래스의 메서드가 같은 이름을 가진 새로운 메서드로 정의되며 호출 시의 동작은 참조하는 객체의 타입에 따라 달라집니다.

 

자식 클래스의 메서드를 선언할때 new 키워드를 사용하여 의도적으로 부모 클래스의 메서드를 숨긴다는 것을 명확하게 나타냅니다(필수는 아니지만 사용권장)

class Animal
{
    public void Speak()
    {
        Console.WriteLine("The animal makes a sound.");
    }
}

class Dog : Animal
{
    public new void Speak() 
    {
        Console.WriteLine("The dog barks.");
    }
}

class Program
{
    static void Main()
    {
        Animal myAnimal = new Animal();
        Dog myDog = new Dog();

        myAnimal.Speak(); // "The animal makes a sound." 
        myDog.Speak();    // "The dog barks." 

        Animal anotherAnimal = new Dog();
        anotherAnimal.Speak(); // "The animal makes a sound."
    }
}

반응형

'c#' 카테고리의 다른 글

C# 프로그래밍 - 구조체(Struct)  (0) 2023.09.13
C# 프로그래밍 - this 키워드  (0) 2023.09.12
C# 프로그래밍 - new 키워드  (0) 2023.09.12
C# 프로그래밍 - 속성(property)  (0) 2023.09.11
C# 프로그래밍 - 생성자와 소멸자  (0) 2023.09.11

댓글

Designed by JB FACTORY