C#中类的继承问题03

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值