[C#] 추상클래스, 추상메서드 예제
using System.Collections.Generic;
using System.Linq;
using System.Text;
// 구현 코드를 가지지 않는 메서드가 있는데 이런 메서드를 추상 메서드라고 한다.
// 추상메서드는 abstract 지정자를 붙이는데 인수 목록과 리턴 타입은 가지지만
// 본체는 가지지 않으며 세미콜론 하나로 끝난다.
//
// 다음이 그 예이다.
// public abstract int MoMo(int a, double b);
//
// 추상 메서드는 너무 일반적이기 때문에 코드를 정의할 수 없으며
// 파생 클래스에서 재정의해야만 호출 가능한 메서드가 된다.
// 파생 클래스에서 반드시 재정의해야 하므로 virtual을 붙이지 않아도 자동으로 가상이다.
//
// 추상 클래스는 너무 일반적이어서 인스턴스를 생성할 수 없는 클래스이다.
// 클래스 선언문에 abstract 지정자를 붙이면 이 클래스는 추상 클래스가 된다.
//
// 추상 메서드가 하나라도 선언되어 있는 클래스는 역시 추상이어야 한다.
namespace Abstract
{
abstract class Animal // 동물들은 울수 있지만 동물 그 자체는 우는 방식을 결정할 수 없는 것이다.
{
public abstract void Sound(); // 그래서 Animal의 Sound 메서는 본체를 가지지 않는 추상 메서드로 정의
} // 동물은 분명히 울기는 우는데 어떻게 우는지는 Animal 단계에서 결정할 수
// 없고 Dog, Cow로 내려가 봐야 아는 것이다.
class Dog : Animal
{
public override void Sound()
{
Console.WriteLine("멍멍");
}
}
class Cow : Animal
{
public override void Sound()
{
Console.WriteLine("음메");
}
}
class Cat : 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();
A = new Cat(); A.Sound();
}
}
}
출처: 가메출판사, 닷넷 프로그래밍 정복, 김상형 저