본문 바로가기

C#/기본 문법

C# 상속성

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

 

Mage, Archer, Knight 클래스의 부모인 Player 클래스를 생성

부모(기반) 클래스 : Player

자식(파생) 클래스 : Mage, Archer, Knight

 

공통된 속성(필드), 함수를 부모에 정의

class Player // 부모(기반) 클래스
{
    public int id;
    public int hp;
    public int attack;

    public Player()
    {
        Console.WriteLine("Player 생성자 호출!");
    }

    public Player(int hp)
    {
        this.hp = hp;
        Console.WriteLine("Player hp 생성자 호출!");
    }

    public void Move()
    {
        Console.WriteLine("Knight Move");
    }

    public void Attack()
    {
        Console.WriteLine("Knight Attack");
    }
}

 

자식 클래스에서 부모 상속

class Mage : Player
{

}

class Archer : Player
{

}

class Knight : Player // 자식(파생) 클래스
{
    public Knight() // 기본적으로 명시하지 않아도 부모 생성자 호출됨
    {
        Console.WriteLine("Knight 생성자 호출!");
    }
}

 

 

 

메인 코드에서 실행

class Program()
{
    static void Main(string[] args)
    {
        Knight knight = new Knight();
    }
}

 

 

컴파일 결과

Player 생성자 호출!
Knight 생성자 호출!

 

기본적으로 자식에서 생성자 호출하면 부모 생성자 호출됨

 

 

base(매개변수 값)을 통한 호출

class Knight : Player // 자식(파생) 클래스
{
    public Knight() : base(100) // 어느 부모 생성자를 호출할지 지정함
    {
        // this.c = 10; // 나의 변수 c
        // base.hp = 100; // 부모의 변수 hp
        Console.WriteLine("Knight 생성자 호출!");
    }
}

 

 

class Program()
{
    static void Main(string[] args)
    {
        Knight knight = new Knight();
    }
}

 

컴파일 결과

Player hp 생성자 호출!
Knight 생성자 호출!

: base(매개변수 값)으로 지정하면 해당 부모 생성자 호출됨

 

 

부모에서 정의된 함수도 자식에서 사용가능함


class Program()
{
    static void Main(string[] args)
    {
        Knight knight = new Knight();
        knight.Move(); // 부모 함수 사용 가능
    }
}

 

 

전체코드

using Rookiss_CSharp;
using System;
using System.Diagnostics.Metrics;
using System.Numerics;

namespace Rookiss_CSharp
{
    // 객체지향(OOP): 은닉성, 상속성, 다형성

    class Player // 부모(기반) 클래스
    {
        public int hp;
        public int attack;

        public Player()
        {
            Console.WriteLine("Player 생성자 호출!");
        }

        public Player(int hp)
        {
            this.hp = hp;
            Console.WriteLine("Player hp 생성자 호출!");
        }

        public void Move()
        {
            Console.WriteLine("Knight Move");
        }

        public void Attack()
        {
            Console.WriteLine("Knight Attack");
        }
    }

    class Mage : Player
    {

    }

    class Archer : Player
    {

    }

    class Knight : Player // 자식(파생) 클래스
    {
        // int c;

        public Knight() // 기본적으로 명시하지 않아도 부모 생성자 호출됨
        {
            Console.WriteLine("Knight 생성자 호출!");
        }

        // 결과
        // Player 생성자 호출
        // Knight 생성자 호출

        /*
        public Knight() : base(100) // 어느 부모 생성자를 호출할지 지정함
        {
            // this.c = 10; // 나의 변수 c
            // base.hp = 100; // 부모의 변수 hp
            Console.WriteLine("Knight 생성자 호출!");
        }
        */

        // 결과
        // Player hp 생성자 호출
        // Knight 생성자 호출
    }

    class Program()
    {
        static void Main(string[] args)
        {
            Knight knight = new Knight();
            knight.Move();
        }
    }
}

 

 

출처

https://www.inflearn.com/courses/lecture?courseId=324718&roadmapId=355&type=LECTURE&unitId=32810&tab=curriculum&subtitleLanguage=ko

 

상속성 | [C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문

상속성

www.inflearn.com

 

40강 상속성

'C# > 기본 문법' 카테고리의 다른 글

C# 클래스 형식 변환  (0) 2025.11.05
C# 은닉성  (0) 2025.11.02
C# static  (0) 2025.11.01
C# 생성자  (0) 2025.11.01
C# 메모리 영역  (0) 2025.11.01