博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#中类的继承问题01
阅读量:6135 次
发布时间:2019-06-21

本文共 2145 字,大约阅读时间需要 7 分钟。

using System;
using System.Collections.Generic;
using System.Text;
namespace 类的继承问题01
{
    class Program
    {
        static void Main(string[] args)
        {
            //A Aa = new A();
            //Aa.BaseMethod();  //调用自身的方法,即调用A类中的BaseMethod()方法
            B Ba = new B();
            A Aa = Ba;         //隐式转换,或者是上强制类型转换
            Aa.BaseMethod();   //多态,调用B类中重写的BaseMethod()方法
            //B Ba = new B();
            //Ba.BaseMethod();   //调用自身的方法,即调用B类中的BaseMethed()方法
            //B Ba = new B();
            //A Aa = Ba;
            //Ba = (B)Aa;        //强制类型转换,Aa必须满足:Aa的实际类型必须是B或者是继承自B的类的类型
            //Ba.BaseMethod();   //调用自身的方法,即调用B类中的BaseMethed()方法
            //C Ca = new C();
            //B Ba = Ca;
            //Ca = (C)Ba;        //强制类型转换,Ba必须满足:Ba的实际类型必须是C或者是继承自C的类的类型
            //Ca.BaseMethod();   //调用自身的方法,即调用C类中的BaseMethed()方法
            //C Ca = new C();
            //A Aa = Ca;
            //Ca = (C)Aa;        //强制类型转换,Aa必须满足:Aa的实际类型必须是C或者是继承自C的类的类型
            //Ca.BaseMethod();   //调用自身的方法,即调用C类中的BaseMethed()方法
           // D Da = new D();
           // A Aa = Da;
           // C Ca;
           在整个这一小代码段里可以换成 C Ca = new C();
           // Ca = (C)Aa;              //强制类型转换,Aa必须满足:Aa的实际类型必须是C或者是继承自C的类的类型
           // Ca.BaseMethod();        // ?多态 最后调用的是D类中的BaseMethed()方法,原因是Aa的实际类型是D
            //C Ca = new C();
            //B Ba = new B();
            //A Aa = Ba;
            //Ca = (C)Aa;   //这里会发生异常,原因是Aa的实际类型是B,而现在是想把Aa强制转换为C,而C是从B 派生的
            //Ca.BaseMethod();//所以会发生异常
            //C Ca = new C();
            //B Ba = new B(); //在整个这一小代码段里可以换成B Ba;
            //A Aa = Ca;  
            //Ba = (B)Aa;
            //Ba.BaseMethod();//?多态 最后调用的是C类中的BaseMethed()方法,原因是Aa的实际类型是C
            //C Ca = new C();
            //B Ba = Ca;          //隐式转换,或者是上强制类型转换
            //Ba.BaseMethod();    //多态调用C类中重写的BaseMethod()方法
            //C Ca = new C();
            //A Aa = Ca;          //隐式转换,或者是上强制类型转换
            //Aa.BaseMethod();    //多态调用C类中重写的BaseMethod()方法
            //C Ca = new C();
            //Ca.BaseMethod();      //调用自身的方法,即调用C类中的BaseMethed()方法
            Console.ReadKey();
            
          
        }
    }
    class A
    {
        public virtual void BaseMethod()
        {
            Console.WriteLine("ABaseMethod");
        }
    }class B:A
    {
               /* B类中被重写的BaseMethod()方法在B类的各级后代类里仍将是一个virtual方法,就是说你可以在B类的后代类中再次重写这个方法,例如C类中的BaseMethod()方法 */
        public override void BaseMethod()  
        {                                               
             Console.WriteLine("BBaseMethod");
        }
    }
    class C:B
    {
        public override void BaseMethod()
        {
            Console.WriteLine("CBaseMethod");
        }
    }
    class D : C
    {
        public new  void BaseMethod()   //在这里可以通过new隐藏基类C中的public override void BaseMethod(){.....}方法
        {
            Console.WriteLine("DBaseMethod");
        }
    }
}
// 保留子new可以和vietual一起用,但不能和override一起用
本文转自terryli51CTO博客,原文链接: http://blog.51cto.com/terryli/512733,如需转载请自行联系原作者
你可能感兴趣的文章
ubuntu apt-get 安装 lnmp
查看>>
焊盘 往同一个方向增加 固定的长度方法 总结
查看>>
eclipse的maven、Scala环境搭建
查看>>
架构师之路(一)- 什么是软件架构
查看>>
jquery的冒泡和默认行为
查看>>
USACO 土地购买
查看>>
【原创】远景能源面试--一面
查看>>
B1010.一元多项式求导(25)
查看>>
10、程序员和编译器之间的关系
查看>>
前端学习之正则表达式
查看>>
配置 RAILS FOR JRUBY1.7.4
查看>>
AndroidStudio中导入SlidingMenu报错解决方案
查看>>
修改GRUB2背景图片
查看>>
Ajax异步
查看>>
好记性不如烂笔杆-android学习笔记<十六> switcher和gallery
查看>>
JAVA GC
查看>>
codeforce 599B Spongebob and Joke
查看>>
3springboot:springboot配置文件(外部配置加载顺序、自动配置原理,@Conditional)
查看>>
9、Dubbo-配置(4)
查看>>
前端第七天
查看>>