百犬より一打C#入門-対象向け2)継承性

11861 ワード

Point-#継承#仮想#オーバーライド

class 생성할_클래스 : 부모 클래스
  • 継承とは
  • は、既存のフレームワークの親クラスの子クラスにすべての機能を提供することを意味します.
  • は、作成するクラス
  • に親を継承することを示す.
  • 親クラスが持つ「形態」や「行為」は複製のように持ってくることができる.
  • は両親が私を産んだように遺伝子複製の形態です.

  • 1)Car 009等級:自動車通用行為の方法
    2)ガソリン車クラスと電気自動車クラスはCar 009クラスを継承しているが、給油方式は異なる.
    
    namespace RoadBook.CsharpBasic.Chapter05.Examples
    {
        class Ex009
        {
            public void Run()
            {
                GasolineCar008 gasolineCar = new GasolineCar008();
                gasolineCar.Color = "검정";
                gasolineCar.Size = "SUV";
                ElectronicCar008 electronic = new ElectronicCar008();
                electronic.Color = "초록";
                electronic.Size = "경차";
    
                Console.WriteLine("{0}색 {1}가", gasolineCar.Color, gasolineCar.Size);
                gasolineCar.Go();
    
                Console.WriteLine("{0}색 {1}가", electronic.Color, electronic.Size);
                electronic.Left();
            }
        }
    
        class Car009
        {
            public string Color { get; set; }
            public string Size { get; set; }
    
            public void Engine_on()
            {
                Console.WriteLine("시동을 켭니다.");
            }
    
            public void Engine_off()
            {
                Console.WriteLine("시동을 끕니다.");
            }
    
            public void Go()
            {
                Console.WriteLine("전진합니다.");
            }
    
            public void Back()
            {
                Console.WriteLine("후진합니다.");
            }
    
            public void Left()
            {
                Console.WriteLine("좌회전합니다.");
            }
    
            public void Right()
            {
                Console.WriteLine("우회전합니다.");
            }
    
            /*
             * 부모 클래스에서 만든 가상의 클래스 (virtual 키워드 사용)
             * virtual 키워드 : 자식 클래스에서 메소드 재정의가 가능하도록 '가상(virtual)의 메소드' 껍데기를 만든 것
             * 만약 자식 클래스에서 메소드 재정의가 이루어지지 않는다면 부모의 기능을 물려 받게된다.
             */
            public virtual void InputGas() // 기름을 넣는 행위
            {
                Console.WriteLine("기름을 넣습니다.");
            }
        }
    
        // 부모 클래스로부터 상속받은 자식 클래스
        /* 
         * GasolineCar009와 ElectronicCar009 클래스가 Car009을 상속한 코드이다.
         * 부모 클래스는 자동차(Car008) 그 자체이다ㅏ.
         * 자식클래스는 휘발유 자동차와 전기 자동차이다.
         * 
         * class 생성할_클래스 : 부모 클래스
         */
        class GasolineCar009 : Car009 {
    
            /*
             * 클래스간 상속 관계에서 메소드를 재정의하는 것을 오버라이드(override)고 한다.
             * c#에서 virtual 메소드로 재정의 하는 메소드에 'override' 키워드로 명시하면 오버라이드 메소드로 만들어진다.
             */
    
            public override void InputGas()
            {
                Console.WriteLine("휘발유를 넣습니다."); //자식 클래스에서 메소드 오버라이드
            }
        }
        class ElectronicCar009 : Car009 {
            public override void InputGas()
            {
                Console.WriteLine("전기를 넣습니다."); //자식 클래스에서 메소드 오버라이드
            }
        }
    }