상속, virtual, override, overload, 연결(chaining), casting
예제 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
다운 캐스팅은 명시적
'C# 기초' 카테고리의 다른 글
배열 예제 (0) | 2023.07.24 |
---|---|
구조체, 추상 클래스, 인터페이스, 1차원 배열 (0) | 2023.07.24 |
void, 메서드 매개변수, 생성자 연습 (0) | 2023.07.21 |
switch문, 생성자 연습+예제 (0) | 2023.07.21 |
for문 연습문제 나머지(5~14)+도전문제 (0) | 2023.07.20 |