객체 지향 프로그래밍에선 부모 클래스와 자식 클래스가 있는데, 부모 클래스는 자식 클래스의 기반이 된다 하여 기반 클래스라고 부르기도 하고, 자식 클래스는 부모 클래스로부터 파생되었다고 해서 파생 클래스라고도 부르기도 한다.
class 부모 클래스
{
// 부모 클래스 필드 값
// 부모 클래스 메소드
}
class 자식 클래스 : 부모 클래스
{
// 부모 클래스의 모든 상태와 행동이 전달
}
class Hero
{
private int hp;
private int attack;
public void Attack()
{
Console.WriteLine("공격하라");
}
}
class Knight : Hero
{
private int defense;
public void Defense()
{
Console.WriteLine("방어하라");
}
}
class Mage : Hero
{
private int mana;
public void Magic()
{
Console.WriteLine("마법 공격 시전!!");
}
}
Knight 클래스와 Mage 클래스는 Hero클래스를 상속받아 클래스를 정의하였다.
즉 Private 접근제한자에 파생 클래스로부터의 접근을 허용하는 역할이
추가되었다.
class Hero
{
protected int hp;
private int attack;
public void Attack()
{
Console.WriteLine("공격하라");
}
}
class Knight : Hero
{
private int defense;
public void Defense()
{
hp -= 10; //protected는 자식클래스에서 접근 가능하지만
attack += 10; //private는 자식클래스에서 접근할 수 없다.
Console.WriteLine("방어하라");
}
}
class Hero
{
protected int hp;
private int attack;
public Hero(int attack)
{
this.attack = attack;
//매개변수와 내부 멤버 변수의 이름이 같은 상황
//this키워드를 통해 내부 멤버 변수에 접근할 수 있다.
}
}
class Hero
{
protected int hp;
protected int attack;
}
class Knight : Hero
{
int hp;
private int defense;
public Knight(int hp)
{
base.hp = hp;
this.hp = 100;
}
public int Hp
{
get { return hp; }
}
public int Php //부모의 hp를 확인
{
get { return base.hp; }
}
}
class Program
{
static void Main(string[] args)
{
Knight knight = new Knight(200);
Console.WriteLine(knight.Hp); //현재 hp를 출력
Console.WriteLine(knight.Php); //부모의 hp를 출력
}
}
//출력결과
//100
//200
class Hero
{
protected int hp;
protected int attack;
protected string name;
public Hero() { }
public Hero(string name)
{
this.name = name;
}
}
class Knight : Hero
{
public Knight(int attack, string name) : base(name)
{
this.attack = attack;
this.hp = 100;
}
public int Attack
{
get { return attack; }
}
public string Name
{
get { return name;}
}
}
class Program
{
static void Main(string[] args)
{
Knight knight = new Knight(200,"james");
Console.WriteLine($"{knight.Name}의 공격력은 {knight.Attack}입니다.");
}
}
class Creature
{
protected int hp;
protected int attack;
public int Hp
{
get { return hp; }
set { hp = value; }
}
public int Attack
{
get { return attack; }
set { attack = value; }
}
public bool IsDead()
{
if (hp < 0) return true;
else return false;
}
}
class Hero : Creature
{
protected string name;
protected int defense;
public Hero(string name)
{
this.name = name;
Console.WriteLine("생성자 발동");
}
public string Name
{
get { return name; }
}
}
class Knight : Hero
{
public Knight(string name) : base(name)
{
this.hp = 100;
this.attack = 100;
Console.WriteLine("생성자 발동2");
}
}
class Program
{
static void Main(string[] args)
{
Knight knight = new Knight("kim");
Console.WriteLine(knight.Name);
Console.WriteLine(knight.Hp);
Console.WriteLine(knight.Attack);
}
}