프로그램/C# - Study / / 2010. 9. 14. 12:16

7D - 다형성, 상속

반응형

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
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유