C#中类的继承问题04

    技术2022-05-11  46

     

    using  System; using  System.Collections.Generic; using  System.Text; namespace  类的继承问题04{     class  Program    {         static   void  Main( string [] args)        {            A Aa;   // 定义一个引用变量 虽然抽象类不可以实例化,但可以声明抽象类的引用变量             C Ca  =   new  C();            Aa  =  Ca;            Aa.AbstractMethod01();  // 调用C类实现的AbstractMethod01()方法,这个是通过多态实现的             Aa.NotAbstractMethod(); // 调用自身的非抽象方法             B Ba;   // 定义一个引用变量  虽然抽象类不可以实例化,但可以声明抽象类的引用变量             Ba  =  (B)Aa;            Ba.AbstractMethod01(); // 调用C类实现的AbstractMethod01()方法,原因是多态             Ba.AbstractMethod02(); // 调用C类实现的AbstractMethod02()方法,原因是多态             Console.ReadKey();        }    }     abstract   class  A    {         public   abstract   void  AbstractMethod01(); // 抽象方法,没有主体,结尾以分号结束          public   abstract   void  AbstractMethod02(); // 抽象方法,没有主体,结尾以分号结束          public   void  NotAbstractMethod()        {            Console.WriteLine( " 抽象类A中的非抽象方法 " );        }    }     abstract   class  B : A  // 派生自抽象类A的B可以不实现其抽象方法,但要保证B类也必须是抽象的才行     {         public   override   void  AbstractMethod01()    // ,派生类B中实现了基类A中的一个抽象方法,另一个不实现是可以的         {                                          // 也就是说,派生类可以不完全实现抽象基类的抽象方法,此时这个派生类必须也是抽象的             Console.WriteLine( " B类实现的抽象方法01 " );        }    }     class  C : B     // 最中实现了A类中的抽象方法,终于冲破了“抽象诅咒”     {         public   override   void  AbstractMethod01()        {             // throw new Exception("The method or operation is not implemented.");              base .AbstractMethod01();        // 通过base可以调用抽象基类中的抽象方法,此时是调用基类B中的AbstractMethod01()方法             Console.WriteLine( " C类实现的抽象方法01 " );        }         public   override   void  AbstractMethod02()        {             // throw new Exception("The method or operation is not implemented.");]             Console.WriteLine( " C类实现的抽象方法02 " );        }    }     abstract   class  F : A   // 虽然F类派生自抽象类A,但它可以一个也不实现A中的抽象方法      {                      // 但要保证F是抽象类     }     class  E : F    {         public   override   void  AbstractMethod01()        {            Console.WriteLine( " E类实现的抽象方法01 " );        }         public   override   void  AbstractMethod02()        {            Console.WriteLine( " E类实现的抽象方法02 " );        }    }}

    最新回复(0)