본문 바로가기

교육 노트/C# 강의

[C# 때려잡기] C# 강의 29. 오버라이딩 (overriding)

전에 강의에서 웨폰 클래스를 만들고 각종 무기들이 상속받아


모든 무기가 attack 함수를 사용할수 있었다.


그런데 내 게임에서 나이프는 SSS급 레어 무기라 공격할때 다른 무기들과 다르게 동작하고 싶다.

class Weapon
{
public void Attack()
{
Console.WriteLine("무기로 공격!");
}
}
class Knife : Weapon
{
public void Attack()
{
Console.WriteLine("칼로 공격!");
}
}
class Gun : Weapon
{

}



class Program
{

static void Main(string[] args)
{
Knife k = new Knife();
Gun g = new Gun();

k.Attack();
g.Attack();
}
}

그래서 다르게 동작하게 knife에서  Attack를 재정의 하였다



이렇게 함수를 자식클래스에서 재정의 하는것이 오버라이딩이다

오버로딩이 아니다 오버라이딩이다.


오버라이딩은 같은 시그니처를 가진 함수를 자식에서 재정의하는것이고

오버로딩은 이름이 같은 다른 시그니처를 가진 함수를 정의하는것이다

만약 자식에서  파라미터를 받는 attack함수를 만들었다면 그건 오버라이딩이 아니라 그냥 자식이 원래 가지고있는 attack와 다른 시그니처를 가진 attack를 오버로딩 한것이고 파라미터를 가지지않는 attack를 함수를 정의했다면 그게 오버라이딩이다.


728x90