상속, virtual, override, overload, 연결(chaining), casting
2023. 7. 24.

예제 1.

 

 

현재 클래스의 인스턴스는 Marine이므로 TerranUnit클래스에서 this를 썼지만 Starcraft.Marine이 출력됨

 

예제2.

 

 

 

virtual, override

virtual - 재정의 : 부모클래스에서 작성 = > 재정의허용

override-가상 구현을 확장 : 파생클래스에서 작성 => 부모 클래스의 메서드를 재정의

 

base: 파생클래스에 부모클래스의 멤버에 엑세스하는 키워드

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

namespace Starcraft
{
    internal class Firebat:TerranUnit
    {
        public Firebat()
        {

        }

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

Firebat.cs

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

namespace Starcraft
{
    internal class Firebat:TerranUnit
    {
        public Firebat()
        {

        }

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

App.cs

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

namespace Starcraft
{
    internal class Marine : TerranUnit //TerranUnit을 상속받는 클래스 마린
    {
        
        //생성자

        public Marine()
        {
            Console.WriteLine("Marine 클래스의 생성자 호출\n");
           // Console.WriteLine(this.hp);
        }

        public override void Attack()
        {
            //base.Attack();
            Console.WriteLine("총으로 공격합니다.\n");
        }


    }
}

Marine.cs

매서드 overloading

-같은 이름의 매서드를 여러 번 정의할 수 있음

 

 

 

생성자 연결(생성자 체이닝:chaining)

파생클래스의 생성자에 base 키워드 사용

using System;

namespace Starcraft
{
    public class Marine : TerranUnit
    {
        //생성자 
        public Marine(int hp) : base (hp)
        {

        }
    }
}
using System;

namespace Starcraft
{
    public class TerranUnit
    {
        int hp;
        //생성자 
        public TerranUnit(int hp)
        {
            this.hp = hp;
        }
    }
}

 

-생성자도 오버로드 할 수 있다.

https://www.youtube.com/watch?v=yVDljROH1Jg&list=PLTFRwWXfOIYBmr3fK17E0VhKPyYrGy75z&index=40 

Upcasitng

파생 클래스의 인스턴스를 부모 클래스에 할당

 

 

Downcasting

다운 캐스팅은 명시적

 

myoskin