추상 메소드
- 구현 코드를 가지지 않는 메소드
ex) public abstract int dd(int a, double b);
- 상속 계층의 상위 클래스에서 파생 클래스를 위해 메소드 시그니처만 정의해노고자 할때 사용
- 너무 일반적이기 때문에 코드를 정의할 수 없으며 파생 클래스에서 재정의해야만 호출 가능한 메소드가 된다
- 파생 클래스에서 반드시 재정의해야 하므로 virtual을 붙이지 않아도 자동으로 가상이다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
using System;
 
namespace test
{
    abstract class Animal
    {
        public abstract void Sound();
    }
 
    class Dog:Animal
    {
        public override void Sound()
        {
            Console.WriteLine("멍멍");
        }
    }
 
    class cow : Animal
    {
        public override void Sound()
        {
            Console.WriteLine("음메");
        }
    }
         
    class Program
    {
        static void Main(string[] args)
        {
            Animal A;
            A = new Dog();
            A.Sound();
 
            A = new cow();
            A.Sound();
        }
    }
}



- Animal은 일반적인 동물을 표현하기는 하지만 너무 일반적이어서 아무 것도 할 수 없으며 우는 소리조차 정의할수 없다
 동물들은 울 수 있지만 동물 그 자체는 우는 방식을 결정할수 업슨 것이다
 그래서 Animal의 Sound메소드는 본체를 가지지 않는 추상 메소드로 정의되어 있다
 즉, 동물은 분명히 울기는 하는데 어떻게 우는지는 Animal 단계에서 결정할 수 없고 밑으로 내려가봐야 아는 것

- 실세계에 존재하는 특정한 동물을 표현하는 것이 아니므로 A = new Animal() 생성문은 에러가 난다

- 추상 클래스의 자식들은 상속받은 추상 메소드를 재정의해야만 비로소 구체 클래스가 된다

Posted by 코딩하는 야구쟁이
,