首页 > 其他分享 >new和Override分别有什么作用(什么情况下用new或者Override)

new和Override分别有什么作用(什么情况下用new或者Override)

时间:2024-07-29 21:32:19浏览次数:12  
标签:基类 调用 下用 public 派生类 Override new Method

override

  1. 用途

    • override 用于在派生类中重写基类中的虚方法或抽象方法。
    • 重写的方法必须与基类中的方法具有相同的签名(方法名、参数列表和返回类型)。
    • 基类中的方法必须声明为 virtualabstract 或已经由另一个 override 方法重写。
  2. 多态性

    • override 支持多态性,允许在运行时根据对象的实际类型来决定调用哪个方法版本。
    • 即使通过基类类型的引用调用方法,也会调用派生类中重写的方法。
  3. 示例

    public class BaseClass {
        public virtual void Method() {
            Console.WriteLine("Base Method");
        }
    }
    
    public class DerivedClass : BaseClass {
        public override void Method() {
            Console.WriteLine("Derived Method (Overridden)");
        }
    }
    
    // 使用
    BaseClass baseInstance = new DerivedClass();
    baseInstance.Method(); // 输出 "Derived Method (Overridden)"
    

new

  1. 用途

    • new 通常用于实例化一个新的对象。
    • 在派生类中,new 可以用来隐藏基类中的成员,这意味着派生类中的成员将取代基类中的成员,但不会改变其行为。
    • 当使用 new 隐藏基类中的成员时,必须确保方法签名相同。
  2. 隐藏基类成员

    • 使用 new 关键字隐藏基类中的成员意味着通过派生类的对象直接调用该成员时,会使用派生类中的实现。
    • 如果通过基类类型的引用调用成员,则会调用基类中的成员。
  3. 示例

    public class BaseClass {
        public virtual void Method() {
            Console.WriteLine("Base Method");
        }
    }
    
    public class DerivedClass : BaseClass {
        public new void Method() {
            Console.WriteLine("Derived Method (Hidden)");
        }
    }
    
    // 使用
    DerivedClass derivedInstance = new DerivedClass();
    derivedInstance.Method(); // 输出 "Derived Method (Hidden)"
    
    BaseClass baseInstance = new DerivedClass();
    baseInstance.Method(); // 输出 "Base Method"
    

总结:

  • override 用于实现多态性,重写基类中的虚方法或抽象方法,使得通过基类引用调用时也能得到派生类的行为。
  • new 用于隐藏基类中的成员,使得通过派生类直接调用时使用派生类的实现,而通过基类引用调用时则使用基类的实现。

标签:基类,调用,下用,public,派生类,Override,new,Method
From: https://www.cnblogs.com/voyager-rz/p/18331117

相关文章

  • 编译期new,constexpr虚函数,C++
    标准:C++20环境:VSCodeg++13.2C++20新特性,constexpr虚函数,编译期new表达式,可以在编译期实现多态。示例代码://这段仅仅示例编译期new。structA{constexprA(){p=newint(6);}constexpr~A(){deletep;}constexprautoget()co......
  • Windows下用CMake构建和编译第三方依赖库并向C:\Program Files\或C:\Program Files
    从CMake构建和编译第三方依赖库的步骤:1、下载第三方依赖库的源码,并解压到指定的目录中。2、在第三方依赖库的的源码所在的目录下(一般是src/目录下)创建一个文件夹build。3、打开CMakeGUI软件,按照常规步骤配置和产生针对某种编译器的解决方案文件,比如Visualstudio2019。如下如......
  • 演示 数据类型 数组名[]=new 数据类型[大小],循环输入5个成绩,保存到double数组,并输出
    importjava.util.Scanner;publicclassexercise13{//编写一个main方法publicstaticvoidmain(String[]args){//演示数据类型数组名[]=new数据类型[大小]//循环输入5个成绩,保存到double数组,并输出//步骤//1.创建一个dou......
  • CF568C New Language 题解
    Description将\(\texttt{a}\sim\texttt{a}+l-1\)这\(l\)个字符分成\(\texttt{V,C}\)两个集合。你需要构造一个长度为\(n\)且满足\(m\)个限制且不小于另一个长度为\(n\)的字符串\(s\)的最小字符串。每一个限制为若字符串的第\(p_1\)个位置上的字符\(\in......
  • welcome to my new start
    thisisanewstart.I'mehua'swife.QwQ放个缺省源:#include<bits/stdc++.h>typedeflonglongLL;typedefunsignedlonglongULL;#definerep(i,a,b)for(inti=(a);i<=(b);i++)#defineper(i,a,b)for(inti=(a);i>=(b);i--......
  • How do I increase max_new_tokens
    题意:怎样增加 max_new_tokens 的值问题背景:I'mfacingthiserrorwhilerunningmycode:    运行代码时遇到如下错误:ValueError:Inputlengthofinput_idsis1495,but max_length issetto20.Thiscanleadtounexpectedbehavior.Youshouldcons......
  • JavaScript中的new map()和new set()使用详细(new map()和new set()的区别)
    简介:newMap():在JavaScript中,newMap()用于创建一个新的Map对象。Map对象是一种键值对的集合,其中的键是唯一的,值可以重复。newSet():在JavaScript中,newSet()是用来创建一个新的Set对象的语法。Set对象是一种集合,其中的值是唯一的,没有重复的值。newSet()可以用......
  • Newtonsoft 特性[JsonIgnore ] 对于继承属性的神奇效果
    阅读前请有点基础[JsonIgnore]publicDateTimeCreateTimccc{get;set;}一般用Newtonsoft序列化类时候,如果不要序列化这个属性,在上面加这个特性就好了(ps.这个特性和Newtonsoft和Text.Json的名称重复,注意不要搞错)定义子类和父类,用隐藏基类......
  • CF140E New Year Garland
    题意有\(m\)种小球,用这些小球装饰一棵\(n\)层的圣诞树,每层需要放置\(a_i\)个小球。在每一层中,相邻球颜色不同,且相邻两层球颜色集合不同,求装饰圣诞树的方案数,答案对\(p\)取模。\(1\len,m\le10^6,2\lep\le10^9,1\lea_i\le5000,\sum_{i=1}^na_i\le10^7\qquad\tex......
  • 为什么选择Spring容器管理对象而不是直接使用new?
    为什么选择Spring容器管理对象而不是直接使用new?在Java开发中,创建对象是再普通不过的操作了。我们通常会使用new关键字来实例化一个类。然而,随着项目的复杂度增加,直接使用new来创建对象会带来很多问题。这时候,Spring容器就显得尤为重要。那么,为什么我们要选择Spring容器来管理对......