首页 > 其他分享 >覆盖(new),重写(Override)和重载(Overload)

覆盖(new),重写(Override)和重载(Overload)

时间:2023-02-22 18:23:22浏览次数:29  
标签:函数 GetName Overload Override new 父类 重写 public

覆盖:new关键词修饰方法,保留父类方法
重写:override关键词修饰方法,不保留父类方法
覆载:同一个类中,方法名相同,参数不同

覆盖(new)

覆盖(new)指重新定义子类中与父类具有相同函数特征的的函数体。子类中有一函数和父类中函数的函数特征相同,但函数体不同,称为覆盖。这种覆盖又称为隐藏,是隐藏父类中相同的函数,并没有进行重写。在子类中用new 关键字修饰,定义的与父类中同名的方法。覆盖不会改变父类方法的功能。

class Program
    {
        static void Main(string[] args)
        {
            B1 b1 = new B1();
            Console.WriteLine(b1.GetName());    //输出内容为“中文名”
            B2 b2 = new B2();
            Console.WriteLine(b2.GetName());    //输出内容为“yingwenming”
            //下半部分内容与上半部分进行对比
            B1 b3 = new B2();
            Console.WriteLine(b3.GetName());    //输出内容为“中文名”
        }
    }
    public class B1
    {
        public string GetName()
        {
            return "中文名";
        }
    }
    public class B2 : B1
    {
        public new string GetName()
        {
            return "yingwenming";
        }
    }

重写(Override)

重写(Override)指子类修改父类中某个函数的函数体,需要重写的父类中的函数必须是由virtual、abstract 或 override标注的,不能重写非虚方法或静态方法。
Override是在继承的时候,如果你写的函数与要继承的函数函数特征(函数特征包括函数名,参数的类型和个数)相同,那么,加上这个关键字,在使用这个子类的这个函数的时候就看不见父类的函数了,它被覆盖掉了。
用关键字virtual修饰的方法,叫虚方法。虚方法是多态的一种体现。相应的没有用virtual修饰的方法,叫实方法。可以在子类中用override声明同名的方法,这个叫“重写”。“重写”父类方法就是修改它的实现方式或者说在子类中对它进行重新编写。重写是重写基类的方法,把父类中的方法变成我们更需要的。重写会改变父类中的方法功能。

class Program
    {
        static void Main(string[] args)
        {
            A1 a1 = new A1();
            Console.WriteLine(a1.GetName());       //输出内容为“中文名”
            A2 a2 = new A2();
            Console.WriteLine(a2.GetName());      //输出内容为“yingwenming”
            //该例子注意和下面的例子进行对比
            A1 a3 = new A2();
            Console.WriteLine(a3.GetName());      //输出内容为“yingwenming”
        }
    }
    public class A1
    {
        public virtual string GetName()
        {
            return "中文名";
        }
    }
    public class A2 : A1
    {
        public override string GetName()
        {
            return "yingwenming";
        }
    }

重载(Overload)

overload:重载指的是同一个类中有两个或多个名字相同但是参数不同的方法,(注:返回值不能区别函数是否重载),重载没有关键字。返回值可能不同,可能相同。

标签:函数,GetName,Overload,Override,new,父类,重写,public
From: https://www.cnblogs.com/smileher/p/17145416.html

相关文章

  • new bing 申请(2023.2.22成功)
    记录备忘环境:万维网(us)微软账号步骤:访问bing.com/new,先尝试点击加入候补名单,如果出现出错了,请重试,继续以下步骤根据brant_liu在微软社区的回答,需......
  • 【JavaScript】24_旧类与new运算符
    14、旧类早期JS中,直接通过函数来定义类一个函数如果直接调用xxx()那么这个函数就是一个普通函数一个函数如果通过new调用newxxx()那么这个函数就是一个够早函数​......
  • CF750H New Year and Snowy Grid
    \(\text{Solution}\)这个问题是不好判断的考虑简单点的,\((1,1)\)到\((h,w)\)是否连通那么只要在最外围一圈#(显然一些位置不能加),判断\((h+1,n)\)和\((0,w+1)\)是......
  • python+playwright 学习-5.new_context上下文与新窗口操作
    前言browser.new_context()创建一个新的浏览器上下文。它不会与其他浏览器上下文共享cookies/缓存。浏览器上下文使用browser.new_context()创建context对象,context......
  • 简单理解js之ActiveX控件 new ActiveXObject
    ActiveX控件切记:ActiveX是微软的东西,故只有IE才支持!ActiveX控件,它一些可重用的软件组件或对象,通过使用ActiveX控件,可以很快地在网址、台式应用程序、以及开发工具中加入......
  • final和override
    override:当在父类中使用了虚函数时候,你可能需要在某个子类中对这个虚函数进行重写,以下方法都可以:classA{virtualvoidfoo();}classB:publicA{void......
  • Java面试宝典_君哥讲解笔记04_java基础面试题——String s=new String(“xyz“);创建了
    java基础面试题目录文章目录​​java基础面试题目录​​​​前言​​​​Strings=newString("xyz");创建了几个StringObject【重要】​​​​全面理解:Strings2="xyz"......
  • CPP内存分配的详细指南——new和allocator以及智能指针
    Motivationcpp里面的内存管理一直让我头疼万分,最近重新翻了翻cppprimeplus这本书,被里面各种new搞得头皮发麻,于是就有了这篇博文。主要记录我自己对cpp里面内存管理的问......
  • 有什么区别 new 和 malloc() ?
    malloc()是一个以数字(字节)作为参数的函数;它返回一个void*指向单元化存储。new是一个运算符,它接受一个类型和(可选)该类型的一组初始值设定项作为它的论点;它返回一个......
  • new后可以用free吗
    虽然语言不会阻止您这样做,但您永远不应该在使用C++new运算符收到的块上使用Cfree函数。始终对从new运算符接收的块使用C++delete运算符,对从new[]运算符接收......