... | ... | @@ -484,5 +484,67 @@ class Book |
|
|
자바의 super 예약어와 같다. this와 용법은 같지만 base는 가리키는 대상이 부모 클래스이다.
|
|
|
|
|
|
|
|
|
## 다형성
|
|
|
```c#
|
|
|
class Animal
|
|
|
{
|
|
|
virtual public void Sound() //virtual : 자식 클래스에 의해서 재정의 될 수 있다.
|
|
|
{
|
|
|
Console.WriteLine("소리를 낸다.");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
class Dog : Animal
|
|
|
{
|
|
|
override public void Sound() // override : 부모로부터 상속받은 메서드와는 다르게 구현한다.
|
|
|
{
|
|
|
Console.WriteLine("멍멍!");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
class Cat : Animal
|
|
|
{
|
|
|
override public void Sound()
|
|
|
{
|
|
|
Console.WriteLine("야옹!");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
class Human : Animal
|
|
|
{
|
|
|
override public void Sound()
|
|
|
{
|
|
|
Console.WriteLine("안녕하세요!");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
class Whale : Animal
|
|
|
{
|
|
|
new public void Sound()
|
|
|
{
|
|
|
Console.WriteLine("끼룩끼룩!"); //단순히 자식 클래스에서 동일한 이름의 메서드가 필요했을 때 new를 쓴다.
|
|
|
}
|
|
|
}
|
|
|
|
|
|
class Program
|
|
|
{
|
|
|
static void Main(string[] args)
|
|
|
{
|
|
|
Dog dog = new Dog();
|
|
|
Cat cat = new Cat();
|
|
|
Human human = new Human();
|
|
|
Whale whale = new Whale();
|
|
|
|
|
|
Animal animal = human;
|
|
|
|
|
|
dog.Sound(); //자식 클래스의 인스턴스에 따라 다양하게 재정의 된다.
|
|
|
cat.Sound();
|
|
|
animal.Sound(); //오버라이딩을 했기 때문에 자식 클래스의 메서드 호출.
|
|
|
|
|
|
animal = whale;
|
|
|
animal.Sound(); //new 했기 때문에 부모 클래스의 원 메서드 호출.
|
|
|
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
|