다형성이란?: 같은 타입이지만 다양한 동작을 수행할 수 있는 능력을 뜻합니다.
- 가상 메서드는 부모클래스에서 정의되고, 자식클래스에서 재정의 할 수 있는 메서드
- 가상 메서드는 virtual 키워드를 사용하여 선언되며 자식 클래스에서 재정의 될 수 있습니다.
- 이를 통해 자식 클래스에서 부모 클래스의 메서드를 변경하거나 확장할 수 있습니다.
class Parent
{
// 프로퍼티도 virtual 키워드 사용할 수 있습니다.
public virtual string Str { get; set; }
// 가상 메서드로 선언합니다.
public virtual void show()
{
Console.WriteLine("Parent의 show() 메서드");
}
}
class Child : Parent
{
// 프로퍼티도 재정의할 수 있습니다.
public override string Str { get; set; }
// show() 메서드를 재정의합니다.
public override void show()
{
Console.WriteLine("Parent 클래스의 show() 메서드 오버로드");
}
}
출처: https://developer-talk.tistory.com/469 [DevStory:티스토리]
- 추상 클래스는 직업적으로 인스턴스를 생성할 수 없습니다.
- 주로 상속을 위한 베이스 클래스로 사용됩니다.
- 추상 클래스는 abstract 키워드를 사용하여 선언되며, 추상 메서드를 포함할 수 있습니다.
- 추상 메서드는 구현부가 없는 메서드로, 자식 클래스에서 반드시 구현되어야 합니다.
abstract class Shape
{
public abstract void Draw(); // abstract 키워드로 선언
}
class Circle : Shape
{
public override void Draw() // 자식클래스에서 override를 사용하여 재정의
{
Console.WriteLine("Drawing a circle");
}
}
오버라이딩 : 상위 클래스에서 물려받은 메서드를 하위 클래스에서 재정의하는것
- 부모클래스에서 정의된 메서드를 자식클래스에서 재정의하는것을 의미합니다.
- 상속 관계에 있는 클래스 간에 발생하며 메서드의 이름, 매개변수, 반환타입이 같아야합니다.
- 자식 클래스는 부모 클래스의 메서드를 재정의하여 자신에게 맞는 동작을 구현 할 수 있습니다.
public class Shape
{
public virtual void Draw()
{
Console.WriteLine("Drawing a shape.");
}
}
public class Circle : Shape
{
public override void Draw() // 자식클래스에서 override를 이용
{
Console.WriteLine("Drawing a circle.");
}
}
오버로딩 : 하나의 메서드에 여러가지 구현하는것
- 동일한 메서드 이름을 가지고 있지만 매개변수의 개수, 타입 또는 순서가 다른 여러개의 메서드를 정의하는것을 의미합니다.
- 오버로딩을 통해 동일한 이름을 가진 메서드를 다양한 매개변수 조합으로 호출할 수 있습니다.
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