상속성

이승한·2023년 6월 29일
0

CSharp

목록 보기
5/25

객체 지향 OOP(은닉성,상속성,다형성)

이 중 상속성에 대해 알아보자.

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 생성자 호출

이렇게 결과가 나타날 것이다.

0개의 댓글