상속과 오버라이딩 제한

정영훈·2022년 10월 31일
0

C#프로그래밍

목록 보기
22/29

😍 sealed 키워드

sealed 키워드는 클래스와 메서드 앞에 적용하는 키워드로 클래스에 적용하면 절대 상속하지 말라는 의미가 되고, 메서드에 적용하면 더 이상 오버라이딩하지 말라는 의미

상속 제한

  • 클래스 앞에 sealed 키워드를 붙이면 상속하지 말라는 뜻이다.
sealed class Human
{
    //필드값과 메서드
}

class Player : Human //오류발생
{

}

메서드 오버라이딩 제한

  • sealed 키워드를 메서드 앞에 붙일 때는 더 이상 오버라이딩하지 말라는 의미이다.
class Human
{
    public virtual void Test()
    {
        Console.WriteLine("나는 조상");
    }
}

class Adult : Human
{
    sealed public override void Test() //오버라이딩 봉인
    {
        Console.WriteLine("나는 부모");
    }
}

class Baby : Adult
{
    public override void Test() //여기서 에러
    {
        Console.WriteLine("나는 자식");
    }
}

😍 abstract 키워드

abstract 키워드는 sealed 키워드와 반대로 무조건 상속해서 쓰라는 의미 또는 이 메서드는 반드시 오버라이딩해라는 의미로 사용

상속

  • abstract 키워드를 클래스에 적용하면 반드시 상속하여 사용해야 된다.
abstract class Human
{
    //필드값과 메서드
}
class Adult : Human
{

}
class Program
{
    static void Main(string[] args)
    {
        Human human = new Human(); //여기서 에러 반드시 상속하여야 한다.
        Human Adult = new Adult(); //상속하여 사용하면 에러가 발생하지 않음
    }
}

메서드 오버라이딩

  • abstract 키워드를 메서드에 적용하면 이 메서드는 반드시 오버라이딩해야 된다.
  • abstract 키워드를 메서드에 적용할 때는 반드시 클래스에도 abstract키워드를 적용하야여 한다.
  • abstract 메서드가 되면 중괄호 {}를 사용하지 않고 곧바로 세미콜론을 찍어야 한다. 왜냐면 어차피 상속해서 사용할 것이므로 내용을 적지 않는 것이다.
abstract class Human
{
    public abstract void Test(); //virtual을 적지 않아야 된다.
    //abstract 메서드는 중괄호를 사용하지 않고 바로 세미콜론을 찍어야 한다.
}
class Adult : Human
{
    public override void Test()
    {
        Console.WriteLine("상속했습니다.");
    }
}
class Program
{
    static void Main(string[] args)
    {
        Human Adult = new Adult(); //상속하여 사용하면 에러가 발생하지 않음
    }
}
profile
경북소프트웨어고등학교 정보교사

0개의 댓글