
상속
기본 클래스의 기능을 물려받아
새로운 클래스(파생 클래스)를 만드는 기능
상속은 재사용성을 높이고 유지보수를 쉽게 할 수 있다.
공통적으로 쓰는 부분은 기본 클래스에 저장
다양한 클래스들을 생성하고
기본 클래스의 내용을 가져와 상황에 맞게 수정 가능
public class Enemy
{
public void Move()
{
Console.WriteLine("두발로 걸어갑니다")
}
}
public class Zealot : Enemy
{ }
public class Zergling : Enemy
{
public void Move()
{
Console.WriteLine("네발로 뛰어갑니다");
}
}
출력
두발로 걸어갑니다
네발로 뛰어갑니다
가상 메서드 (virtual)
기본 클래스에서 기본 구현 제공 가능
파생 클래스에서 override 가능
✅ 아이템 사용(Use)과 같이 기본 동작이 있지만 일부 아이템은 특수 효과가 필요할 때
✅ 캐릭터 피해 계산(TakeDamage)처럼 공통 로직이 있으면서 특정 캐릭터 타입에서 방어력 등을 고려해야 할 때
class Enemy
{
public virtual void Move()
{
Console.WriteLine("두발로 걸어갑니다");
}
}
class Zergling : Enemy
{
public override void Move()
{
Console.WriteLine("네발로 뛰어갑니다");
}
}
Enemy player = new Zergling ();
player.Move(); // 네발로 뛰어갑니다"
출력
네발로 뛰어갑니다
부모 클래스에서 virtual로 정의한 메서드를 선언
자식 클래스에서 override를 통해 두발로 걷는게 아닌
"네발로 뛰어갑니다" 를 출력한다.
부모 클래스에서 가져오지만 수정하여 사용 가능
메서드, 속성, 이벤트 선언 시 사용되며,
자식 클래스에서 해당 멤버의 동작 방식을
재정의(override)할 수 있도록 허용하는 역할
부모 클래스에서 정의한 메서드를 자식 클래스에서 재정의 하는 것
이를 통해 다형성을 구현
추상 메서드 (abstract)
override해서 구현해야 함abstract class)에서만 선언 가능이런 종류의 기능은 있어야 해!"라고 약속만 해두고,
구체적으로 어떻게 할지는 너희들이 알아서 정해 라는 느낌
이 코드를 예시로 들자면 Enemy(부모 클래스)에서 move를 메서드를 만들지만 내용이 없다. (가상 메서드랑 비교하면 이해됨)
Zergling(자식 클래스)에서 move 메서드를 상속받아 안의 내용을 작성한다.
public abstract class Enemy
{
public abstract void Move();
}
public class Zergling : Enemy
{
public override void Move()
{
Console.WriteLine("네발로 뛰어갑니다");
}
}
public class asd
{
public static void Main(string[] args)
{
Enemy player = new Zergling();
player.Move(); // 네발로 뛰어갑니다"
}
}
출력
네발로 뛰어갑니다