다형성 (Polymorphism)
2021. 6. 17. 22:24
728x90
클래스는 상속 관계에 있으므로 참조 변환이 가능하다.
- "Upcasting" : 상위를 참조하여 하위 class를 통해 구현하기 (구현은 대입 연산자 '='을 사용)
- "Downcasting" : 하위를 참조
ex) A test = (A) objB; //B의 객체를 A의 참조변수로 사용
이건 박싱/언박싱과 다른 개념이다!
- 박싱 : 값 형식을 object형으로 변환
- 언박싱 : object형을 기존 값 형식으로 변환
- 반드시 cast를 사용하여 데이터형을 명시해야함
다형성(Polymorphism) : 다양한 형태.
[ 일반적인 형태 ]
- 상위 class에서 하위 class를 호출
class A {
public virtual void Print(){
...
} //하위 class에서 재정의할거면 외부에서 접근 가능한 public으로 선언해야함
}
class B : A { //A를 재정의
public override void Print(){
...
}
}
class Program {
...
A test = new B(); //A를 참조하여 상위에서 하위를 호출 (상위 class를 타고 내려가면서 하위 class에 접근)
test.Print();
}
[ type + cast 형태 ]
class A {
public virtual void Print(){
...
} //하위 class에서 재정의할거면 외부에서 접근 가능한 public으로 선언해야함
}
class B : A { //A를 재정의
public override void Print(){
...
}
}
class Program {
static void Main(string[] args){
A test1 = new B(); //A를 참조하여 B의 객체 생성
test1.Print(); //B의 Print() 메서드 실행
//cast형을 이용한 참조
B test2 = new B(); //B 객체 생성
A test3 = (A)test2; //B의 객체를 A의 참조변수로 사용. 여기서 (A) 는 명시적 형변환을 의미함. (A) 생략 가능
test3.Print(); //B의 Print() 메서드 실행
}
//A를 참조하여 상위에서 하위를 호출 (상위 class를 타고 내려가면서 하위 class에 접근)
}
728x90
'C# > C# 문법' 카테고리의 다른 글
인덱서 (Indexer) (0) | 2021.06.17 |
---|---|
속성(Property) (0) | 2021.06.17 |
오버라이드(Override), 오버로드 (Overload) (0) | 2021.06.17 |
상속(Inheritance), 추상클래스(Abstract Class) (0) | 2021.06.17 |
파일 입출력 (0) | 2021.06.15 |