상속관계에서 부모에 정의한 함수를 자식에서 다시 정의해서 사용하는 예제입니다.
부모 클래스의 함수에 virtual로 설정해두면, 자식 함수에서는 override 키워드를 사용해서 함수를 재 정의 해서 사용할 수 있습니다.
아래와 같이 Pet Class에는 Bark() 함수와 PlayWith() 함수를 정의해 두고,
Dog Class와 Cat Class는 Pet Class를 상속받아 정의됩니다.
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Pet a = new Cat();
Pet b = new Dog();
Console.WriteLine(a.GetType().Name);
Console.WriteLine(a.Intinacy);
a.PlayWith();
Console.WriteLine(a.Intinacy);
a.Bark();
Console.WriteLine();
Console.WriteLine(b.GetType().Name);
Console.WriteLine(b.Intinacy);
b.PlayWith();
Console.WriteLine(b.Intinacy);
b.Bark();
}
}
class Pet
{
public double Intinacy { get; set; }
public Pet()
{
this.Intinacy = 1.0;
}
public void Bark()
{
Console.WriteLine("bow");
}
public void PlayWith()
{
Intinacy += 0.1;
}
}
class Dog : Pet
{
public Dog()
{
this.Intinacy = 2.0;
}
}
class Cat : Pet
{
public Cat()
{
this.Intinacy = 3.0;
}
}
}
위 처럼 정의 한 후 실행해 보면 Cat이든 Dog 이든 bow로 울게되죠.
Cat는 meow로 나타내고 싶은데, 어떻게 하면 될까요~?
Pet Class에 정의한 Bark() 함수를 virtual로 설정한 후, 자식 클래스에서 해당 함수를 재 정의 해서 사용할 수 있도록 해주면 됩니다.
public void Bark()
{
Console.WriteLine("bow");
}
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
public virtual void Bark()
{
Console.WriteLine("bow");
}
위 함수를 아래와 같이 변경해주고, Cat Class에서는 Bark() 함수를 오버라이드 해서 재 정의 해 주면 됩니다.
public override void Bark()
{
Console.WriteLine("meow");
}
====================================================
수정된 전체 소스는 아래와 같습니다.
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Pet a = new Cat();
Pet b = new Dog();
Console.WriteLine(a.GetType().Name);
Console.WriteLine(a.Intinacy);
a.PlayWith();
Console.WriteLine(a.Intinacy);
a.Bark();
Console.WriteLine();
Console.WriteLine(b.GetType().Name);
Console.WriteLine(b.Intinacy);
b.PlayWith();
Console.WriteLine(b.Intinacy);
b.Bark();
}
}
class Pet
{
public double Intinacy { get; set; }
public Pet()
{
this.Intinacy = 1.0;
}
public virtual void Bark()
{
Console.WriteLine("bow");
}
public void PlayWith()
{
Intinacy += 0.1;
}
}
class Dog : Pet
{
public Dog()
{
this.Intinacy = 2.0;
}
}
class Cat : Pet
{
public Cat()
{
this.Intinacy = 3.0;
}
public override void Bark()
{
Console.WriteLine("meow");
}
}
}
실행 결과도 Cat는 meow로 나타나는 걸 확인할 수 있습니다.
도움이 되셨으면 좋겠습니다.
감사합니다.
'C#' 카테고리의 다른 글
배열에 있는 String 값을 연결하는 방법 (0) | 2021.05.25 |
---|---|
C# 대칭수(회문수 - Palindromic number ) 인지 확인하는 소스 (0) | 2020.10.26 |
C# 문자열을 특정 기호를 기준으로 split 하기 (0) | 2020.10.26 |
C# 10진수를 2진수, 8진수, 16진수로 표시하는 방법 (0) | 2020.10.26 |
C# 문자를 숫자로 변환하는 법 (0) | 2020.10.21 |
댓글