C#中类的继承问题03

    技术2022-05-11  112

    using System;using System.Collections.Generic;using System.Text;

    namespace ConsoleApplication1{    class Program    {        static void Main(string[] args)        {            A Aa = new A();            Aa.BaseMethod();

                B Ba = new B();            Ba.BMethod();

                D Da = new D();            Da.BaseMethod();

                F Fa = new F();            Fa.AbstractMethod();            Fa.BaseMethod();//派生类F的实例调用抽象基类E中的非抽象方法 BaseMethod()                       E Ea = Fa; //隐式转换,或者上强制类型转换            Ea.AbstractMethod();//多态,E的变量可以调用派生类中重写的虚拟抽象方法AbstractMethod()            Ea.BaseMethod(); //调用自身的BaseMethod()方法                       Console.ReadKey();        }    }    sealed class A  //密封类可以实例化,但不能继承    {        public void BaseMethod()        {            Console.WriteLine("ABaseMethod");        }    }

        //class C:A   //A是密封类,所以不能继承,只能实例化 所以此处编译时是错误的    //{     //}

        class D        {        public void BaseMethod()        {            Console.WriteLine("DBaseMethod");        }

            //public abstract void DAbstract()  //抽象方法只能放在抽象类中,放在次类中是错误的        //{        //    Console.WriteLine("DAbstract");        //}

        }

        //abstract class D    //D是抽象类,所以不能实例化,只能继承,所以会在Main()函数中导致不能实例化的错误    //{    //    public void BaseMethod()    //    {    //        Console.WriteLine("DBaseMethod");    //    }    //}     abstract class E      //E是抽象类,所以不能实例化,只能继承,要使用抽象类,必须继承这个类     {         public void BaseMethod()   //抽象类可以有非抽象方法等,并且可以提供成员的实现代码          {                          //可以用派生类的实例调用这个抽象类中的非抽象方法             Console.WriteLine("EBaseMethod");         }

             public abstract void AbstractMethod(); //抽象类可以有抽象成员,比如抽象方法,但不能有抽象方法的主体,所以去掉了{}                                          //而且抽象方法只能放在抽象类中,但没有实现代码,执行代码必须在派生类中实现

                  }     class  F:E     {         public override void AbstractMethod() //F类可以不实现这个方法,就是说派生类可以不完全实现抽象基类的抽象方法,但此时派生类必须也是抽象类         {             Console.WriteLine("FAbstractMethod");         }

             //public new void BaseMethod()   //此时F的实例将调用自身的BaseMethod()方法,而不在调用继承自基类E的BaseMethod()方法         //{                               //原因是因为用new保留字隐藏了基类的BaseMethod()方法,所以基类E的中BaseMethod()方法对派生类F是不可见的         //    Console.WriteLine("FBaseMethod");         //}     }

    }//无法创建抽象类或接口的实例 

     

     


    最新回复(0)