C# 가상 키워드Virtual 키워드를 이용해서 가상 클래스 등을 정의하여 사용할 수 있다.
가상클래스의 기능을 자식 클래스에서 재정의하여 사용할 수 있다.
가상 클래스의 메소드는 꼭 재정의(Override) 하지는 않아도 된다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Thredaing.Tasks;
namespace ConsoleApp2
{
public class Monster
{
public string name;
public virtual void Attack()
{
Console.WriteLine("공격 수행");
}
}
public class Ork: Monster
{
public override void Attack()
{
base.Attack();()
name="오크 족장";
Console.WriteLine(name+": 오크 공격");
}
}
class Program
{
static void Main(string[] args)
{
Monster monster=new Monster();
monster.Attack();
Ork ork=new Ork();
ork.Attack();
Console.ReadLine();
}
}
}
C# 추상 키워드추상 키워드(abstract)는 구현해야 할 기능의 이름만 명시하고, 자식 클래스에서 구현한다.
추상 클래스는 인스턴스화 할 수 없으며, 자식 클래스는 기능을 반드시 구현해야 한다.
using System;
using System.Cillection.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp2
{
public abstract class Monster
{
public abstract void Attack();
}
public class Ork: Monster
{
public override void Attack()
{
Console.WriteLine("오크 공격");
}
}
class Program
{
static void Main(string[] args)
{
Ork ork=new Ork();
ork.Attack();
Console.ReadLine();
}
}
}
C# 인터페이스추상클래스와 흡사하다.
C#의 인터페이스는 기본적으로 멤버 변수를 사용할 수 없다.
C# 인터페이스는 다중 상속이 가능하다.
인터페이스느 프로그램의 설계 목적으로 사용된다.
인터페이스는 추상 클래스와 다르게 계층적인 구조가 아니더라도, 같은 기능을 추가하고 싶을 때 사용한다.
using System;
using System.Cillection.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp2
{
public interface Monster
{
void Attack();
void Defense();
}
public class Ork:Monster
{
public void Attack()
{
Console.WriteLine("오크 공격");
}
public void Defense()
{
Console.WriteLine("오크 방어");
}
}
class Program
{
static void Main(string[] args)
{
Ork ork=new Ork();
ork.Attack();
ork.Defense();
Console.ReadLine();
}
}
}