• 声明父类new子类


    基本概念

    这个实例是子类的,但是因为你声明时是用父类声明的,所以你用正常的办法访问不到子类自己的成员,只能访问到从父类继承来的成员。

    在子类中用override重写父类中用virtual申明的虚方法时,实例化父类调用该方法,执行时调用的是子类中重写的方法;

    如果子类中用new覆盖父类中用virtual申明的虚方法时,实例化父类调用该方法,执行时调用的是父类中的虚方法;

     /// <summary>  
     /// 父类  
     /// </summary>  
     public class ParentClass  
     {  
         public virtual void ParVirMethod()  
         {  
             Console.WriteLine("父类的方法...");  
         }  
     }  
    
     /// <summary>  
     /// 子类1  
     /// </summary>  
     public class ChildClass1 : ParentClass  
     {  
         public override void ParVirMethod()  
         {  
             Console.WriteLine("子类1的方法...");  
         }  
     }  
    
     /// <summary>  
     /// 子类2  
     /// </summary>  
     public class ChildClass2 : ParentClass  
     {  
         public new void ParVirMethod()  
         {  
             Console.WriteLine("子类2的方法...");  
         }  
    
         public void Test()  
         {  
             Console.WriteLine("子类2的其他方法...");  
         }  
     }

    ParentClass par = new ChildClass1(); par.ParVirMethod(); //结果:“子类1的方法”,调用子类的方法,实现了多态
    par = new ChildClass2(); par.ParVirMethod();//结果:“父类的方法”,调用父类的方法,没有实现多态

      深究其原因,为何两者不同,是因为原理不同: 
    override是重写,即将基类的方法在派生类里直接抹去重新写,故而调用的方法就是子类方法;

    而new只是将基类的方法在派生类里隐藏起来,故而调用的仍旧是基类方法。

  • 相关阅读:
    postfix队列管理
    fdisk添加磁盘
    postfix日志分析pflogsumm
    ioctl接口内容操作
    linux 路由表设置 之 route 指令详解
    手把手教你用 Strace 诊断问题
    rtsp学习----海康RTSP客户端连接深入分析
    栈回溯技术
    objdump命令
    linux中的strip命令简介------给文件脱衣服
  • 原文地址:https://www.cnblogs.com/DSC1991/p/9358955.html
Copyright © 2020-2023  润新知