
상위 클래스의 멤버에 접근: 하위 클래스는 상속받은 상위 클래스의 멤버에 접근할 수 있으며, 이를 통해 상위 클래스의 기능을 재사용할 수 있다.
메서드 재정의: 하위 클래스는 상위 클래스의 메서드를 재정의하여 자신에게 맞게 수정할 수 있고, 이를 통해 다형성(Polymorphism)을 구현할 수 있다.
상속의 깊이: 클래스가 다수의 계층적인 상속 구조를 형성할 수 있음을 의미하며, 이로 인해 클래스 간의 관계가 복잡해질 수 있어 적절한 상속 깊이를 유지하는 것이 중요하다.
단일 상속: 하나의 하위 클래스가 하나의 상위 클래스만 상속받는 것. C#에서는 단일 상속만을 지원한다.
다중 상속: 하나의 하위 클래스가 여러 개의 상위 클래스를 동시에 상속받는 것. C#은 다중 상속을 지원하지 않는다.
인터페이스 상속: 클래스가 인터페이스를 상속받는 것. 인터페이스는 다중 상속을 지원하며, 클래스는 하나의 클래스와 여러 개의 인터페이스를 동시에 상속받을 수 있다.
코드의 재 사용성: 상속을 통해 상위 클래스의 코드를 재사용할 수 있으므로, 코드의 반복 작성을 줄일 수 있다.
계층 구조의 표현: 클래스 간의 계층 구조를 표현하여 코드의 구조를 명확하게 표현할 수 있다.
유지 보수성의 향상: 상속을 통해 기존 클래스의 수정이 필요한 경우, 해당 클래스만 수정하면 되므로, 코드의 유지 보수성이 향상된다.
// 상위 클래스
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 : Animal
{
public void Bark()
{
Console.WriteLine("Dog is barking.");
}
}
public class Cat : Animal
{
public void Sleep()
{
Console.WriteLine("Cat is sleeping.");
}
public void Meow()
{
Console.WriteLine("Cat is meowing.");
}
}
// 사용 예시
Dog dog = new Dog();
dog.Name = "Bobby";
dog.Age = 3;
dog.Eat(); // 출력: Animal is eating.
dog.Sleep(); // 출력: Animal is sleeping.
dog.Bark(); // 출력: Dog is barking.
Cat cat = new Cat();
cat.Name = "KKami";
cat.Age = 10;
cat.Eat(); // 출력: Animal is eating.
cat.Sleep(); // 출력: Cat is sleeping.
cat.Meow(); // 출력: Cat is meowing.
public class Unit
{
public virtual void Move()
{
Console.WriteLine("두발로 걷기");
}
}
public class Zergling : Unit
{
public override void Move()
{
Console.WriteLine("네발로 걷기");
}
}
// 사용 예시
Zergling zergling = new Zergling();
zergling.Move(); // 출력: 네발로 걷기
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");
}
}
// 사용 예시
Circle circle = new Circle();
circle.Draw(); // 출력: Drawing a circle
Square square = new Square();
square.Draw(); // 출력: Drawing a square
Triangle triangle = new Triangle();
triangle.Draw(); // 출력: Drawing a triangle
오버라이딩 (Overriding)
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 circle = new Circle();
Shape rectangle = new Rectangle();
circle.Draw(); // 출력: Drawing a circle.
rectangle.Draw(); // 출력: Drawing a rectangle.
오버로딩 (Overloading)
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 calculator = new Calculator();
int result1 = calculator.Add(2, 3); // 출력: 5
int result2 = calculator.Add(2, 3, 4); // 출력: 9