전체 코드
using System.ComponentModel;
using System.Numerics;
using System.Threading;
namespace CSharp
{
class Player
{
static public int counter = 1;
public int id;
public int hp;
public int attack;
public void Move()
{
Console.WriteLine("Player Move");
}
public void Attack()
{
Console.WriteLine("Player Attack");
}
}
class Mage : Player
{
}
class Archer : Player
{
}
class Knight : Player
{
}
internal class Program
{
static void Main(string[] args)
{
Knight knight = new Knight();
}
}
}
1. 상속(Inheritance)란?
- 코드의 재사용성을 높이는 핵심 개념
- 부모 클래스(기반 클래스, Base Class): 공통된 속성과 기능을 정의하는 클래스
- 자식 클래스(파생 클래스, Derived Class): 부모 클래스를 상속받아 기능을 확장하는 클래스
base 키워드를 사용하여 부모 생성자를 명시적으로 호출할 수 있음
2. 상속 코드 예제
부모 클래스 (Player)
using System;
class Player
{
protected int hp;
protected int attack;
public Player()
{
hp = 100;
attack = 10;
Console.WriteLine("Player 기본 생성자 호출");
}
public Player(int hp, int attack)
{
this.hp = hp;
this.attack = attack;
Console.WriteLine("Player 매개변수 생성자 호출");
}
public void Move()
{
Console.WriteLine("Player 이동");
}
public void Attack()
{
Console.WriteLine("Player 공격");
}
}
자식 클래스 (Knight, Mage, Archer)
class Knight : Player
{
public Knight() : base(120, 15)
{
Console.WriteLine("Knight 생성자 호출");
}
}
class Mage : Player
{
public Mage() : base(80, 25)
{
Console.WriteLine("Mage 생성자 호출");
}
}
class Archer : Player
{
public Archer() : base(90, 20)
{
Console.WriteLine("Archer 생성자 호출");
}
}
프로그램 실행 (Main 메서드)
class Program
{
static void Main(string[] args)
{
Knight knight = new Knight();
Mage mage = new Mage();
Archer archer = new Archer();
knight.Move();
mage.Attack();
}
}
3. 부모 생성자가 먼저 호출됨
- 자식 클래스가 객체를 생성할 때 부모 생성자가 먼저 호출됨
base(매개변수)를 사용하여 부모 클래스의 특정 생성자를 명시적으로 호출할 수 있음
- 부모 클래스에 기본 생성자가 없을 경우 자식 클래스에서
base(값)을 명시하지 않으면 컴파일 오류 발생
부모 클래스에 기본 생성자가 없을 때 문제 발생 예제
class Player
{
protected int hp;
protected Player(int hp)
{
this.hp = hp;
}
}
class Knight : Player
{
public Knight()
{
}
}
해결 방법: base(값) 사용
class Knight : Player
{
public Knight() : base(120)
{
}
}
4. 상속의 주요 특징
✅ 상속의 장점
| 개념 | 설명 |
|---|
| 코드 재사용성 | 중복 코드를 줄이고, 유지보수를 쉽게 함 |
| 부모 클래스 확장 | 자식 클래스에서 부모의 기능을 확장할 수 있음 |
base 키워드 사용 | 부모 클래스의 생성자를 명시적으로 호출할 수 있음 |
✅ base 키워드 사용법
class Knight : Player
{
public Knight() : base(120, 15)
{
Console.WriteLine("Knight 생성됨");
}
}