메소드 재정의(override)
※ override와 overload를 햇갈리지 말자.
메소드 재정의(override)는 상속 관계의 클래스 사이에서 부모클래스의 메소드를 자식클래스가 부모의 메소드를 받아서 다른 형태로 바꾸어 사용하는 것을 말한다.
사용방법은 아래와 같다.
//부모클래스가 애래와 같이 있다면
class parent
{
public virtual void Name()
{
Console.WriteLine("부모의 메소드");
}
}
// 자식클래스에서 상속받아 메소드를 재정의해서 사용
class Child : parent
{
public override void Name()
{
Console.WriteLine("자식의 메소드");
}
}
예제)
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace ConsoleApplication2
- {
- public class Parent
- {
- public virtual void Name()
- {
- Console.WriteLine("부모의 유산");
- }
- }
- class FirstChild : Parent
- {
- public override void Name()
- {
- Console.WriteLine("첫째 : 내꺼임");
- }
- }
- class SecondChild : Parent
- {
- public override void Name()
- {
- Console.WriteLine("둘째 : ㅈ까 내꺼야");
- }
- }
- class Application
- {
- static void Main(string[] args)
- {
- Parent parent = new Parent();
- FirstChild firstChild = new FirstChild();
- SecondChild secondChild = new SecondChild();
- parent.Name();
- firstChild.Name();
- secondChild.Name();
- }
- }
- }
결과)
가상메소드를 작성할때 주의할점
ㆍ가상메소드는 static으로 선언하지 못한다.(객체를 생성해야되서 안됨)
ㆍ가상메소드는 private 접근지정자로 선언하지 못한다.
|
파생(자식) 클래스에서 메소드를 재정의하려는 의도가 아니고 새로운 메소드를 추가했는데, 우연치않게 기반 클래스의 가상 메소드, 혹은 일반 메소드와 중복되는 이름을 포함할 수도 있다. 이럴 때 new 키워드를 사용해서 해결한다.
public class Parent
{
public void Name()
{
Console.WriteLine("부모의 유산");
}
}
class FirstChild : Parent
{
public void Name()
{
Console.WriteLine("첫째 : 내꺼임");
}
}
상속하고 같은이름의 메소드가 존재시 아래와 같은 경고가 뜸
이를 해결하기 위해서 아래와 같이 new를 자식클래스의 메소드앞에 쑤셔넣어주면 됨.
public class Parent
{
public void Name()
{
Console.WriteLine("부모의 유산");
}
}
class FirstChild : Parent
{
new public void Name()
{
Console.WriteLine("첫째 : 내꺼임");
}
}
'컴퓨터프로그래밍 > C#' 카테고리의 다른 글
C# - 확장클래스, 분할메소드, 중첩클래스 (0) | 2016.11.28 |
---|---|
C# - 추상클래스 (0) | 2016.11.27 |
C# - 상속 (0) | 2016.11.25 |
생성자와 소멸자 (0) | 2016.11.25 |
접근제한자와 this (0) | 2016.11.24 |