C#프로그래밍

virtual, override, overload, base

다모아 2023. 7. 24. 12:39

면접 무조건 물어봄

virtual, override, overload, base가 뭔지..

 

Marine 클래스

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LearnDotnet
{
    internal class Marine : TerranUnit
    {
        //멤버변수

        //생성자메서드
        public Marine()
        {
            Console.WriteLine("Marine클래스 생성자 호출됨");
            Console.WriteLine(this.hp);
        }
        //멤버메서드
        //파생클래스에서 override
        public override void Attack()
        {
            //base.Attack();
            Console.WriteLine("총으로 공격합니다.");
        }

        // 메서드 overload : 같은 이름의 메서드를 여러번 정의 할 수 있음
        public void Attack(TerranUnit target) 
        {
            
        }
    }
}

 

Firebat 클래스

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LearnDotnet
{
    internal class Firebat : TerranUnit
    {
        //멤버변수
        //생성자메서드
        public Firebat()
        {

        }
        //멤버메서드
        public override void Attack() // override : 부모 클래스의 메서드를 재정의(부모 : virtual)
        {
            base.Attack(); //파생클래스에서 부모클래스의 멤버를 엑세스하는 키워드
            Console.WriteLine("화염방사기로 공격했습니다.");
        }
    }
}

 

TerranUnit 클래스

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LearnDotnet
{
    internal class TerranUnit
    {
        //멤버변수
        //protected : 파생 클래스까지 접급할 수 있음
        protected int hp = 10; //모든 테란 유닛은 새염엵을 가지고있다.

        //생성자메서드
        public TerranUnit()
        {
            Console.WriteLine("TerranUnit클래스의 생성자 호출됨");
            Console.WriteLine(this); //클래스의 현재 인스턴스
            Console.WriteLine(this.hp);
        }
        //멤버메서드
        public int GetHp()
        {
            return this.hp;
        }

        //모든 테란 유닛은 공격할 수 있다.
        //부모 : virtual (파생클래스에서 재정의 할 수 있다)
        public virtual void Attack()
        {
            Console.WriteLine("공격했습니다.");
        }
    }
}

 

App 클래스

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LearnDotnet
{
    internal class App
    {
        //생성자 메서드
        public App()
        {
            Marine marine = new Marine(); //호출은 부모가 먼저되고
            marine.Attack();

            Firebat firebat = new Firebat();
            firebat.Attack();
        }
    }
}

 

Marine 오버로드

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LearnDotnet
{
    public class Marine : TerranUnit
    {
        //멤버변수

        //생성자메서드
        public Marine()
        {
        }
        //멤버메서드
        //같은 이름의 생성자 메서드 정의 매개변수만 다르다면
        //메서드 오버로드
        public Marine(int hp)
        {

        }
    }
}

'C#프로그래밍' 카테고리의 다른 글

업캐스팅과 다운캐스팅  (0) 2023.07.24
생성자 체이닝  (0) 2023.07.24
상속  (0) 2023.07.24
저글링, 마린, 메딕  (0) 2023.07.24
저글링 vs 마린  (0) 2023.07.21