using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Ex14OOP5
{
class Program
{
static void Main(string[] args)
{
//1. 메서드 변경
TheBase b = new TheBase();
//b.Method();
TheDerived d = new TheDerived();
//
//2. 형변환
TheBase b2 = new TheDerived();
//TheDerived d2 = (TheDerived)new TheBase();
TheDerived d2 = (TheDerived)b2;
//3. 메소드 호출 기준
TheBase b3 = new TheDerived();
//b2.Method();
//d2.Method();
// b3.Method();
//4.
TheBase b4 = new TheBase(); // 참조 타입과 객체 타입은 같게!
TheDerived d4 = new TheDerived();
TestMethod(b4);
TestMethod(d4); //TheBase 가 TheDerived 받는다
}
//메서드 하나로 오버로딩 없은 여러개를 한꺼번에 해결 가능
// 같은 코드이지만 어떤 객체에 따라 다르게 해결 되는 상황 => 다형성
public static void TestMethod(TheBase b) //TestMethod(d4);=> TheBase 이여도 TheDerived 면 TheDerived 이걸 받는다
{
b.Method();
}
//public static void TestMethod(TheDerived d)
//{
// d.Method();
//}
}
}
************************************************* 코드 파일 추가 ***************************************************
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Ex14OOP5
{
class TheBase
{
string data;
public virtual void Method()
{
Console.WriteLine("TheBase.MEthod");
}
}
//하위 클래스는 상위 클래스 부타 크거나 최소한 같아야한다
class TheDerived : TheBase
{
//public new void Method() //default => 참조타입기준 호출
public override void Method() //객체타입기준 호출
{
Console.WriteLine("TheDerived.MEthod");
}
}
}
/************************************************************************
* 1. 하위 클래스는 상위 클래스의 메서드를 변경할 수 있습니다.
* => 하위 클래스에 상위 클래스와 동일한 형태의 메서드를 만들고
* 다른 내용으로 재정의
*
* 2. 상속관계에 있는 클래스 간에는 형변환 가능 (참조타입과 객체타입이 다를 수 있습니다.)
* => 상위타입참조 = 하위클래스객체 또는 참조 (암시적 형변환)
* TheDerived d = new TheDerived();
* TheBase b = new TheDerived(); //상위타입참조 = 하위타입객체
* b = d; //상위타입참조 = 하위타입참조
*
* => 하위타입참조 = 상위클래스객체 또는 참조 (명시적 형변환)
* TheBase b = new TheDerived();
* TheDerived d =
* (TheDerived)new TheBase(); //하위타입참조 = 상위타입 객체
* d = (TheDerived)b; //하위타입참조 = 상위타입참조
*
* 3. 다형성
* => 동일한 코드(참조)가 상황(객체)에 따라서 다른 처리를 수행하는 경우
* => 상속관계 클래스 간의 형변환 + 객체 기준 메서드 호출 기법으로 구현
*
*
* *********************************************************************/
'프로그램 > C# - Study' 카테고리의 다른 글
수업자료 (0) | 2010.09.16 |
---|---|
7D, 8D - (0) | 2010.09.16 |
7D - 상속, protected (0) | 2010.09.14 |
7D - readonly, const (0) | 2010.09.14 |
7D - 오버로딩 (0) | 2010.09.14 |