virtual 키워드는
기본 클래스에서 정의된 메서드를
파생 클래스에서 재정의하도록 허용
static, abstract, private 한정자와 함께 사용 불가
override 한정자?
상속된 메서드의 구현을 확장하거나 수정
base 키워드?
파생 클래스 내에서 기본 클래스의 맴버에 엑세스하는데 사용
부모클래스에서 virtual
파생 클래스에서 override
자식 클래스에서 부모클래스 맴버 엑세스 base
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Step37_2
{
internal class Program
{
static void Main(string[] args)
{
Marine marine = new Marine();
marine.name = "마린1";
Firebat firebat = new Firebat();
firebat.name = "파이어뱃1";
marine.Attack();
firebat.Attack();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Step37_2
{
class TerranUnit
{
public string name;
//생성자
public TerranUnit()
{
Console.WriteLine("TerranUnit 클래스의 생성자");
}
public virtual void Attack()
{
Console.WriteLine("{0}이(가) 공격 합니다", this.name);
}
protected void Reload(string weaponName) //자식만 접근 가능
{
Console.WriteLine("{0}이(가) {1}을 장전을 합니다", this.name, weaponName); ;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Step37_2
{
internal class Marine : TerranUnit
{
//생성자
public Marine()
{
Console.WriteLine("Marine클래스의 생성자");
}
public override void Attack()
{
base.Reload("총");
Console.WriteLine("{0}이(가) 총으로 공격합니다.", this.name);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace Step37_2
{
internal class Firebat : TerranUnit
{
public Firebat()
{
Console.WriteLine("Firebat클래스의 생성자");
}
public override void Attack()
{
base.Reload("화염방사기");
Console.WriteLine("{0}이(가) 화염방사기로 공격합니다.", this.name);
}
}
}
'Study > C#' 카테고리의 다른 글
[C#] 업캐스팅, 다운캐스팅 (0) | 2024.06.13 |
---|---|
[C#] 생성자 연결 (0) | 2024.06.12 |
[C#] 상속 (1) | 2024.06.03 |
[C#] static 한정자 (0) | 2024.06.02 |
[C#] this 키워드 (0) | 2024.05.31 |