이 중 상속성에 대해 알아보자.
class Knight
{
static public int counter = 1;
public int id;
public int hp;
public int attack;
}
라는 클래스가 있을 때, 다른 직업 Mage, Archer같은 클래스를 만든다면 같은 속성인 id , hp ,attack을 똑같이 선언하여 사용한다면 너무 비효율적일 것이다.
그래서 Player라는 클래스를 생성하고
class Player
{
static public int counter = 1;
public int id;
public int hp;
public int attack;
}
class Mage : Player
{
}
class Archer : Player
{
}
class Knight : Player
{
}
Mage , Archer ,Knight는 Player라는 부모(기반) 클래스를 상속받아서 자식(파생)클래스를 만들어 주면 된다.
그래서 메인함수에서 Knight 객체를 만들면
Player 생성자가 먼저 호출되고 그 다음 Knight 생성자가 호출 되는데 이건 부모 클래스의 생성자부터 자식 클래스의 생성자가 호출 된다고 이해 하면 된다.(강이 위에서 아래로 흐르듯)
결과:
Plyaer생성자 호출
Knight생성자 호출
다른 상황으로는, 부모 클래스인 Player(int hp)라는 생성자를 만들었을때 자식 클래스인 Knight 생성자에서는
class Player{
public Player(){}
public Player(int hp)
{
this.hp=hp;
Console.WriteLine("Player hp생성자 호출")
}
}
class Knight : Player
{
public Knight(): base(100)
{
base.hp=100; // base 키워드로 부모클래스 hp접근
Console.WriteLine("Knight 생성자 호출")
}
}
public Knight() : Player(100)이 아닌 base라는 키워드를 사용하여 만들어 주면 된다.
이렇게 실행하게 된다면 Knight 객체를 만들때 Player 기본 생성자가 아닌 hp생성자가 호출된다.
결과:
Player hp 생성자 호출
Knight 생성자 호출
이렇게 결과가 나타날 것이다.