// 부모 클래스
public class Animal
{
public string Name { get; set; }
public int Age { get; set; }
public void Eat()
{
Console.WriteLine("Animal is eating.");
}
public void Sleep()
{
Console.WriteLine("Animal is sleeping.");
}
}
// 자식 클래스
public class Dog
{
}
public class Cat
{
}
virtual
키워드를 사용하여 선언되며, 자식 클래스에서 필요에 따라 재정의될 수 있음public class Unit
{
public virtual void Move()
{
Console.WriteLine("두발로 걷기");
}
public void Attack()
{
Console.WriteLine("Unit 공격");
}
}
public class Marine : Unit
{
}
public class Zergling : Unit
{
public override void Move()
{
Console.WriteLine("네발로 걷기");
}
}
// 사용 예시
// #1 참조형태와 실형태가 같을때
Marine marine = new Marine();
marine.Move();
marine.Attack();
Zergling zergling = new Zergling();
zergling.Move();
zergling.Attack();
// #2 참조형태와 실형태가 다를때
List<Unit> list = new List<Unit>();
list.Add(new Marine());
list.Add(new Zergling());
foreach (Unit unit in list)
{
unit.Move();
}
abstract
키워드를 사용하여 선언되며, 추상 메서드를 포함할 수 있음abstract class Shape
{
public abstract void Draw();
}
class Circle : Shape
{
public override void Draw()
{
Console.WriteLine("Drawing a circle");
}
}
class Square : Shape
{
public override void Draw()
{
Console.WriteLine("Drawing a square");
}
}
class Triangle : Shape
{
public override void Draw()
{
Console.WriteLine("Drawing a triangle");
}
}
List<Shape> list = new List<Shape>();
list.Add(new Circle());
list.Add(new Square());
list.Add(new Triangle());
foreach (Shape shape in list )
{
shape.Draw();
}
public class Shape
{
public virtual void Draw()
{
Console.WriteLine("Drawing a shape.");
}
}
public class Circle : Shape
{
public override void Draw()
{
Console.WriteLine("Drawing a circle.");
}
}
public class Rectangle : Shape
{
public override void Draw()
{
Console.WriteLine("Drawing a rectangle.");
}
}
Shape shape1 = new Circle();
Shape shape2 = new Rectangle();
shape1.Draw(); // Drawing a circle.
shape2.Draw(); // Drawing a rectangle.
public class Calculator
{
public int Add(int a, int b)
{
return a + b;
}
public int Add(int a, int b, int c)
{
return a + b + c;
}
}
Calculator calc = new Calculator();
int result1 = calc.Add(2, 3); // 5
int result2 = calc.Add(2, 3, 4); // 9
class Base {
public:
void Print() { std::cout << "Base class" << std::endl; }
};
// 기본적으로 private 상속
class Derived : Base {
// Base::Print()는 private으로 상속되어 외부에서 호출할 수 없음
};
// public 상속
class PublicDerived : public Base {
// Base::Print()는 public으로 상속됨
};
class Base {
public:
void Print() { Console.WriteLine("Base class"); }
}
class Derived : Base {
// Base의 Print 메서드는 여전히 public
}
class Base { /* ... */ }
class Derived : Base, IInterface1, IInterface2 {
// 클래스는 하나만 상속 가능, 여러 인터페이스는 구현 가능
}
class Base {
public:
virtual void Print() { std::cout << "Base Print" << std::endl; }
};
class Derived : public Base {
public:
void Print() override { std::cout << "Derived Print" << std::endl; }
};
class Base {
public virtual void Print() {
Console.WriteLine("Base Print");
}
}
class Derived : Base {
public override void Print() {
Console.WriteLine("Derived Print");
}
}
class Base {
public:
virtual void Print() = 0; // 순수 가상 함수
};
abstract class Base {
public abstract void Print(); // 추상 메서드
}
C++
C#
class Base {
public:
virtual ~Base() { std::cout << "Base destructor" << std::endl; }
};