■ 상속(Inheritance) :
- 상속은 부모가 자식에게 재산 혹은 권리 등을 물려주는 것으로 부모 클래스의 기능을 자식 클래스가 상속받아 사용하는 것
- 특정 기능을 제공하는 부모클래스를 정의하고 자식 클래스는 해당 기능을 상속하거나 재정의 할 수 있다
- derived class는 2개 이상의 base class를 가질 수 없다
- base class에서 정의된 private 멤버는 상속 받을 수 없다
- 부모 클래스 = 기준 클래스(base class)
- 자식 클래스 = 파생 클래스(derived class)
■ Example
class Parents
{
public int Num = 100;
public void PrintNum()
{
Console.WriteLine($"Num은 {Num} 입니다.");
}
}
class Child : Parents
{
public string Name = "memoo";
public void PrintName()
{
Console.WriteLine($"Name은 {Name} 입니다.");
}
}
class Program
{
static void Main(string[] args)
{
Child child = new Child();
child.PrintNum();
child.PrintName();
}
}
■ 재정의(Override) :
- 재정의는 base class로 부터 상속받은 기능을 다시 정의하는 것
- 재정의 하려면 base class에서는 virtual 키워드, derived class에서는 override 키워드를 사용
- virtual 키워드를 사용하지 않고 override하게 되면 Error 발생
■ Method 숨기기 :
- base class의 method는 숨기고, derived class의 method만 표시
- derived class에서 new 키워드 사용
■ override 봉인 :
- override하면 문제가 될 수 있는 경우 상속을 제한
- virtual method를 override한 method에 sealed 키워드 사용
■ this, base :
- this는 자기 자신을 의미, this()는 자신의 생성자 의미
- base는 상속 받은 base class를 의미, base()는 base class의 생성자 의미
■ Example
class Animal
{
public void Sound()
{
Console.WriteLine("[Animal] 동물 소리");
}
}
class Dog : Animal
{
public void Sound()
{
Console.WriteLine("[Dog] 멍멍");
}
}
class Bird : Animal
{
public void Sound()
{
Console.WriteLine("[Bird] 짹짹");
}
}
class Program
{
static void Main(string[] args)
{
Animal animal = new Animal();
Dog bella = new Dog();
animal = bella; // 업캐스팅(upcasting)
animal.Sound();
Dog molly = (Dog)animal; // 다운캐스팅(downcasting)
molly.Sound();
Bird tory = (Bird)animal; // System.InvalidCastException 발생
tory.Sound();
}
}
■ 다형성(Polymorphism) :
- 하나의 객체가 여러 형태를 가지는 것
- 업캐스팅(upcasting) : 자식 클래스의 객체를 부모 클래스의 객체로 변환
- 다운캐스팅(downcastring) : 부모 클래스의 객체를 자식 클래스의 객체로 변환
■ Example
class Animal
{
}
class Dog : Animal
{
}
class Bird : Animal
{
}
class Program
{
static void Main(string[] args)
{
Animal animal = new Animal();
Console.WriteLine($"[animal] : {animal.GetType()}");
Dog bella = new Dog();
animal = bella; // 업캐스팅(upcasting)
Console.WriteLine($"[animal] upcasting : {animal.GetType()}");
Dog molly = (Dog)animal; // 다운캐스팅(downcasting)
Console.WriteLine($"[molly] downcasting : {animal.GetType()}");
Bird tory = (Bird)animal; // System.InvalidCastException 발생
Console.WriteLine($"[molly] downcasting : {animal.GetType()}");
}
}
■ InvalidCastException :
- IncalidCastException은 객체의 필드 혹은 메서드의 구조가 다를 수 있기 때문에 발생
- 위 Example에서 animal객체에 bella객체(Dog)를 업캐스팅하여 정상적으로 처리
- animal 객체는 molly객체(Dog)의 정보가 담겨 있기 때문에 정상적으로 다운캐스팅 가능
- animal 객체는 molly객체(Dog)의 정보를 담고 있기 때문에 tory객체(Bird)로 다운캐스팅 할 때는 IncalidCastException이 발생
'개인공부 > C#' 카테고리의 다른 글
[C#] IS, AS (0) | 2022.09.10 |
---|---|
[C#] 중첩 클래스(Nested Class), 분할 클래스(Partial Class) (0) | 2022.09.08 |
[C#] 접근 제한자(Access Modifier) (0) | 2022.09.06 |
[C#] 정적(Static) 클래스, 필드, 메서드 (0) | 2022.09.05 |
[C#] 얕은 복사(Shallow Copy), 깊은 복사(Deep Copy) (0) | 2022.09.05 |