자식 생성자에서 부모의 생성자를 명시적으로 호출할 때 base 키워드를 사용한다.
class Player
{
public Player()
{
Console.WriteLine("부모의 생성자 호출");
}
static public int counter = 1;
public int id;
public int hp;
public int attack;
}
class Knight : Player
{
public Knight() : base()
{
Console.WriteLine("기사의 생성자 호출");
}
,,,
}
부모의 생성자 호출
기사의 생성자 호출
인자를 필요로 하는 부모 생성자도 명시해줄 수 있다.
class Player
{
public Player(int _hp)
{
Console.WriteLine("부모의 생성자 호출");
}
}
class Knight : Player
{
public Knight() : base(10)
{
Console.WriteLine("기사의 생성자 호출");
}
,,,
}
class Player
{
public Player(int _hp)
{
Console.WriteLine("부모의 생성자 호출");
hp = _hp;
}
static public int counter = 1;
public int id;
public int hp;
public int attack;
}
class Knight : Player
{
public Knight() : base(10)
{
Console.WriteLine("기사의 생성자 호출");
int i = base.hp; // 부모의 hp 가리킨다.
int j = this.hp; // 부모의 hp 가리킨다.
}
}
class Player
{
public Player(int _hp)
{
Console.WriteLine("부모의 생성자 호출");
hp = _hp;
}
static public int counter = 1;
public int id;
public int hp;
public int attack;
}
class Knight : Player
{
int hp; // 부모와 동일한 자료형, 이름의 변수가 있다.
public Knight() : base(10)
{
Console.WriteLine("기사의 생성자 호출");
int i = base.hp; // 부모의 hp 가리킨다.
int j = this.hp; // 자신의 hp 가리킨다.
}
}
이건 정말 안좋은 상황이지만 이렇게 같은 자료형, 같은 이름의 변수가 부모와 자식이 둘 다 가진 경우가 있다고 하자.
이런 경우에는
base.hp가 부모의 hp를 가리키고
this.hp가 자신의 hp를 가리킨다.