추상클래스
- 일반 클래스와 상속 관계를 맺는 클래스
- 상속 받는 객체들을 표준화하는 역할
- 상속시 일반 클래스보다 상위에 위치한다.
- 객체생성을 직접 하지 못한다.
- 부분 구현이 가능하다.(데이터를 가질수 있고, 메서드도 구현할수 있다.
추상메서드(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);
}
}
}