zoukankan      html  css  js  c++  java
  • C#中的new修饰符

    MSDN:在用作声明修饰符时,new 关键字可以显式隐藏从基类继承的成员。 隐藏继承的成员时,该成员的派生版本将替换基类版本。 虽然可以不使用 new 修饰符来隐藏成员,但将收到编译器警告。 如果使用 new 来显式隐藏成员,将禁止此警告。

     1 public class BaseClass
     2    {
     3        public void DisplayName()
     4        {
     5            Console.WriteLine("BaseClass");
     6        }
     7    }
     8  
     9 public class DerivedClass : BaseClass
    10    {
    11        public virtual void DisplayName()
    12        {
    13            Console.WriteLine("DerviedClass");
    14        }
    15    }
    16 
    17  public class SubDerviedClass : DerivedClass
    18    {
    19        public override void DisplayName()
    20        {
    21            Console.WriteLine("SubDerviedClass");
    22        }
    23    }
    24  
    25    public class SuperDerviedClass : SubDerviedClass
    26    {
    27        public new void DisplayName()
    28        {
    29            Console.WriteLine("SuperDerviedClass");
    30        }
    31    }
    View Code

    个人理解:

    C#和C++是一样的,类中的方法默认是sealed的,派生类是无法重写基类的同名函数的。

    SuperDerviedClass sdc = new SuperDerviedClass();

    依次将对象赋值给其他的类。分表调用DisplayName方法。

    SuperDerviedClass.DisplayName()输出SuperDerviedClass,因为该类没有派生,方法无法被重载。

    SuperDerviedClass.DisplayName()输出SubDerviedClass,该类的派生类的同名方法用new修饰,被隐藏。

    DerivedClass.DisplayName()输出SubDerviedClass,该类的最远派生类重写了改方法。,而再远的类使用new修饰符,方法被隐藏。

    Java的类中的方法默认是virtual的,任何派生类都可以重写父类的方法。

  • 相关阅读:
    Java实现简单的图片浏览器
    ArrayList源码笔记
    JZ12 数值的整数次方算法笔记
    TCP的三次握手与四次挥手学习笔记
    Deepin安装LAMP环境
    Deepin安装Mysql(解决"没有可安装候选"问题)
    流行的Linux系统合集
    Win10超简单安装,菜鸡钊的装机经验分享
    Java入门(七)之面向对象-划重点
    Java入门(六)之常用的类
  • 原文地址:https://www.cnblogs.com/Sinte-Beuve/p/4230911.html
Copyright © 2011-2022 走看看