언어/C#

[C#] virtual과 abstract (추상 클래스)

돌멩이수프 2022. 5. 2. 22:14
728x90

·virtual

상속 받는 클래스에서 virtual에 있는 내용 중 필요한 것만 골라서 구현해주면 된다.

·abstract (추상 클래스)

상속 받는 클래스에서 abstract에 있는 내용을 반드시 구현해주어야한다.

abstract는 추상 클래스다. 추상 클래스에 있는 멤버는 구현할 수 없고 상속받는 곳에서 구현해주어야 한다.

 

using System;

namespace ConsoleApp1
{
    class Program
    {
        public abstract class Essential
        {
            public virtual void Breath()
            {
                Console.WriteLine("숨쉬기");
            }

            public abstract void Fly();
            public abstract void Swim();

        }

        public class Bird : Essential
        {
            public override void Fly()
            {
                Console.WriteLine("날기");
            }
            public override void Swim()
            {
                Console.WriteLine("죽음");
            }

        }

        static void Main(string[] args)
        {
            Bird bird = new Bird();
            bird.Breath();
        }
    }
}

 

 

Bird에서 Breath를 구현해주지 않았음에도 자동으로 Essential에 있는 Breath가 구현됐다.

만약 Fly나 Swim을 구현해주지 않을 경우 아래의 오류가 나타나게 된다.

 

 

물론 Bird에서 새롭게 Breath를 구현해줄 수도 있다.

 

public class Bird : Essential
{
    public override void Fly()
    {
        Console.WriteLine("날기");
    }
    public override void Swim()
    {
        Console.WriteLine("죽음");
    }
    public override void Breath()
    {
        Console.WriteLine("헉헉");
    }
}

 

https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/virtual

 

virtual - C# 참조

virtual(C# 참조) 아티클 04/06/2022 읽는 데 4분 걸림 기여자 14명 이 문서의 내용 --> virtual 키워드는 메서드, 속성, 인덱서 또는 이벤트 선언을 수정하고 파생 클래스에서 재정의하도록 허용하는 데 사

docs.microsoft.com

 

https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/abstract

 

abstract - C# 참조

abstract(C# 참조) 아티클 04/06/2022 읽는 데 5분 걸림 기여자 16명 이 문서의 내용 --> abstract 한정자는 수정되는 항목에 누락되거나 불완전한 구현이 있음을 나타냅니다. abstract 한정자는 클래스, 메서

docs.microsoft.com

 

728x90