0317 Abstract

2021. 3. 17. 15:18C#/수업내용

클래스가 자체에서 인스턴스화 되지 않고 다른 클래스의 기본 클래스로만 사용된다.

추상 클래스에서 파생된 비 추상 클래스에 의해 구현 되어야 한다.

추상 메서드 선언은 추상 클래스에서만 허용된다.

추상 메서드는 본문이 없다. (정의만 내린다.)

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("고스트가 클로킹을 풀었습니다.");
        }
    }