static void Main(string[] args) { Son Imson = new Son(); Console.WriteLine(Imson.Field); Imson.Print(); Imson.Override_Print(); ///////////////////////////////////////////////// ///////////////////////////////////// // 만약 하위 클래스 객체를 선언한다고 해도, // 참조 변수의 참조형이 상위 클래스라면 // 같은 이름이어도 상위 클래스의 메서드를 호출한다. Mom Immom = new Son(); Console.WriteLine(Immom.Field); Immom.Print(); //////////////////////////////// // 그러나, 만약 메서드가 override되어있다면 // override된 메서드를 호출한다! Immom.Override_Print(); // 이게 그냥 재정의하는 것과, override하는 것의 큰 차이점! Son test2 = new Son(); Mom test3 = (Mom)test2; // 이런 식으로 업캐스트하여 참조형에 인스턴스를 넣어줄 수도 있다. test3.Print(); // --> Mom 호출. Console.ReadKey(); }