본문 바로가기

   
Programming/C#

추상클래스(Abstract Class)

반응형

추상클래스

 - 일반 클래스와 상속 관계를 맺는 클래스

 - 상속 받는 객체들을 표준화하는 역할

 - 상속시 일반 클래스보다 상위에 위치한다.

 - 객체생성을 직접 하지 못한다.

 - 부분 구현이 가능하다.(데이터를 가질수 있고, 메서드도 구현할수 있다.

 

추상메서드(Abstract Method)

 - 추상클래스 내에서 선언되는 메서드

 - 파생 클래스(자식클래스)에서 반드시 구현해야 함

 - 메서드 본문을 가질수 없다.

 

추상클래스는 실체화가아니다. 부모역활만 한다.

 

1. 멤버를 구성할수 있고

abstract class Printer

       {

             public string name;

             public string owner;

2. 행동을 만드는 부분을 규약 할수 있다.

       public abstract void Print();

 

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace Test

{

       class Abstract01

       {

             static void Main(string[] args)

             {

                    HP640 hp = new HP640();

                    hp.Print();

 

                    LG740 lg = new LG740();

                    lg.Print();

 

                    //Printer p = new Printer();

             }

       }

 

       //추상 클래스 => 객체의 행동을 표준화 한다.

       abstract class Printer

       {

             public string name;

             public string owner;

 

             public void Test()

             {

                    Console.WriteLine("추상클래스");

             }

 

             //추상 메서드 - 본문을 구현할 수 없는 메서드  

             //abstract virtual과 유사

             public abstract void Print();

       }

 

       //추상메서드 자식요소에서 구현

       class HP640 : Printer

       {

             public override void Print()

             {

                    Console.WriteLine("HP만의 기술로 출력..");

             }

       }

 

       class LG740 : Printer

       {

             public override void Print()

             {

                    Console.WriteLine("LG만의 기술로 출력..");

             }

       }

}

 

 

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace Test

{

       class Abstract02

       {

             static void Main(string[] args)

             {

                    마린 marine = new 마린();

                    marine.name = "마린1";

 

 

                    파이어뱃 firebat = new 파이어뱃();

                    firebat.name = "파이어뱃1";

 

                    marine.이동하다(100, 200);

                    firebat.이동하다(100, 200);

 

                    marine.공격하다("져글링1");

                    firebat.공격하다("져글링1");

             }

       }

 

       abstract class 테란

       {

             public string name;

 

             public abstract void 이동하다(int x, int y);

             public abstract void 공격하다(string name);

       }

 

       //구현 클래스(일반)

       class 마린 : 테란

       {

             public override void 이동하다(int x, int y)

             {

                    Console.WriteLine("{0} [{1},{2}]로 달려갑니다.", this.name, x, y);

             }

 

             public override void 공격하다(string name)

             {

                    Console.WriteLine("{0} {1}를 총으로 공격합니다.", this.name, name);

             }

       }

 

       class 파이어뱃 : 테란

       {

             public override void 이동하다(int x, int y)

             {

                    Console.WriteLine("{0} [{1},{2}]로 느리게 갑니다.", this.name, x, y);

             }

 

             public override void 공격하다(string name)

             {

                    Console.WriteLine("{0} {1}를 화염 방사기로 태워버립니다..", this.name, name);

             }

       }

}

 

 


 

 
반응형