C#/수업내용
0317 Abstract
피주빈
2021. 3. 17. 15:18
클래스가 자체에서 인스턴스화 되지 않고 다른 클래스의 기본 클래스로만 사용된다.
추상 클래스에서 파생된 비 추상 클래스에 의해 구현 되어야 한다.
추상 메서드 선언은 추상 클래스에서만 허용된다.
추상 메서드는 본문이 없다. (정의만 내린다.)
static /virtual를 쓰면 안됨.
public abstract class ZergUnit:IBurrow
{
public abstract void Attack();
public abstract void Burrow();
public abstract void Unburrow();
}
interface IBurrow
{
void Burrow();
void Unburrow();
}
public class Zergling : ZergUnit
{
private bool isBurrowed;
public override void Attack()
{
if (isBurrowed)
{
Console.WriteLine("저글링은 버로우 상태에서 공격할 수 없습니다.");
}
else
{
Console.WriteLine("저글링이 발톱으로 공격합니다.");
}
}
public override void Burrow()
{
this.isBurrowed = true;
Console.WriteLine("저글링이 땅 속으로 숨습니다.");
}
public override void Unburrow()
{
this.isBurrowed = false;
Console.WriteLine("저글링이 땅 위로 올라옵니다.");
}
}
public class Lurker:ZergUnit
{
private bool isBurrowed;
public override void Attack()
{
if (this.isBurrowed)
{
Console.WriteLine("럴커가 가시로 공격합니다.");
}
else {
Console.WriteLine("럴커는 버로우 상태일때만 공격할 수 있습니다.");
}
}
public override void Burrow()
{
Console.WriteLine("럴커가 땅 속으로 숨습니다.");
}
public override void Unburrow()
{
throw new NotImplementedException();
}
}
public abstract class TerranUnit
{
public abstract void Attack();
public abstract void Cloak();
public abstract void Uncloak();
}
public class Wraith:TerranUnit
{
public override void Attack()
{
Console.WriteLine("레이스가 레이저로 공격합니다.");
}
public override void Cloak()
{
Console.WriteLine("레이스가 클로킹을 합니다.");
}
public override void Uncloak()
{
Console.WriteLine("레이스가 클로킹을 풀었습니다.");
}
}
public class Ghost:TerranUnit
{
public override void Attack()
{
Console.WriteLine("고스트가 총으로 공격합니다.");
}
public override void Cloak()
{
Console.WriteLine("고스트가 클로킹을 합니다.");
Console.WriteLine("고스트가 핵 감지를 시작합니다.");
}
public override void Uncloak()
{
Console.WriteLine("고스트가 클로킹을 풀었습니다.");
}
}