카테고리 없음
[3.17] abstract 키워드
ljw4104
2021. 3. 17. 15:12
abstract class Shape
{
public abstract int GetArea();
}
추상 클래스 (Abstract class)
- '불완전'한 클래스라고 생각하는게 제일 쉽다.
- 클래스 앞에 'abstract'이라는 키워드를 붙혀 추상클래스로 만든다.
- '불완전'한 클래스이기 때문에 인스턴스화 할 수 없다. 추상 메서드를 선언했으면 상속받는 클래스는 반드시 구현해야 한다.
- 추상 메서드 선언은 추상 클래스에서만 허용된다. 또한 추상 메서드는 본문이 없다.
- 추상 메서드에서 static 또는 virtual을 사용하는 것은 오류이다. 하지만 자식 클래스에서의 override는 붙인다.
예제
using System;
namespace Study07
{
public class App
{
public App()
{
Wraith wraith = new Wraith();
wraith.Cloak();
wraith.Attack();
wraith.UnCloak();
Ghost ghost = new Ghost();
ghost.Cloak();
ghost.Attack();
ghost.UnCloak();
}
}
}
using System;
namespace Study07
{
interface Cloaking
{
void Cloak();
void UnCloak();
}
}
using System;
namespace Study07
{
public abstract class TerranUnit : Cloaking
{
public abstract void Attack();
public abstract void Cloak();
public abstract void UnCloak();
}
}
using System;
namespace Study07
{
public class Wraith : TerranUnit
{
private bool isCloak;
public Wraith()
{
Console.WriteLine("Wraith 생성자.");
}
public override void Attack()
{
Console.WriteLine("레이스가 공격합니다.");
}
public override void Cloak()
{
isCloak = !isCloak;
Console.WriteLine("투명상태가 되었습니다.");
}
public override void UnCloak()
{
isCloak = !isCloak;
Console.WriteLine("투명상태가 풀렸습니다.");
}
}
}
using System;
namespace Study07
{
public class Ghost : TerranUnit
{
private bool isCloak;
public Ghost()
{
Console.WriteLine("Ghost 생성자.");
}
public override void Attack()
{
Console.WriteLine("고스트가 공격합니다.");
}
public override void Cloak()
{
isCloak = !isCloak;
Console.WriteLine("고스트가 투명상태가 되었습니다.");
}
public override void UnCloak()
{
isCloak = !isCloak;
Console.WriteLine("고스트의 투명상태가 풀렸습니다.");
}
}
}