首页 > 其他分享 >New与override区别

New与override区别

时间:2023-08-14 22:25:25浏览次数:29  
标签:区别 子类 派生类 基类 override New 方法 隐藏

New与Override区别

New(隐藏)

new是指“隐藏”,是指子类隐藏了父类的方法,当然,通过一定的转换,可以在子类的对象中访问父类的方法。

  1. new是派生类用来隐藏基类中的方法的;也就是说在派生类中“看不到”基类中的方法;

  2. 如果要在派生类中隐藏(不是重写)基类中的方法,而没有使用new关键字,编译时会出现一个警告,提示如果是要隐藏基类中的方法,请使用new关键字;

  3. 派生类可以隐藏基类中的虚方法,也可以隐藏基类中的普通方法。

  4. 如果在派生类中用private来修饰new 方法,那么只在该派生类中隐藏了基类中的方法,在该派生类之外,相当于没有隐藏基类中的方法;

  5. 如果在派生类中隐藏了基类中的方法,在该派生类的派生类中,将延续对该派生类对基类方法的隐藏。

Override(覆盖)

override是指“覆盖”,是指子类覆盖了父类的方法。子类的对象无法再访问父类中的该方法。

  1. override是派生类用来重写基类中方法的;

  2. override不能重写非虚方法和静态方法;

  3. override只能重写用virtual、abstract、override修饰的方法;

  4. 不能使用修饰符 new、static、virtual 或 abstract 来修改 override 方法。

总结

共同点

  1. 它们都是子类在用某种方式来“隐藏”父类的同名方法
  2. 在子类对象上调用这个方法,会实际调用子类的“新”方法,而非基类的方法
  3. 它们都可以在方法中使用base来调用基类的方法

不同点

  1. override会真正覆盖掉基类的方法,使它再无可能被调用到;而 new 则只是将基类方法进行了隐藏
  2. override关键字必须要写明; new则并不必须,相当于在表明自己很清楚是在试图隐藏基类方法

如何选择

  1. 被 virtual 标记的方法就意味着这个方法有很大可能性会在子类中被覆写,并提供更具体目有意义的实现。基类中的 virtual 方法通常只给出最基本且很可能不完整的实现,通常只是用来辅助子类的覆写。一旦子类给出了更好的实现,那么基类的方法并不应该希望被调用。
  2. 基类的普通方法在设计时并不打算让子类进行覆写,因为这些方法通常已经是完整且有意义的。只有当子类希望对某个基类方法进行进一步定制时,才会考虑用 new这种方式来显式隐藏基类的方法。但基类的方法仍然是有意义且可以被调用的。
  3. 简单来说,如果你想“覆盖”基类的某个方法,但是该方法并不是 virtual 时,你才需要考虑用 new 。

标签:区别,子类,派生类,基类,override,New,方法,隐藏
From: https://www.cnblogs.com/MuyingBlog/p/17629923.html

相关文章

  • 值传递和引用传递区别是什么?
    先看两个例子,如果例子的背后原理都懂,就不需要看这篇文章了,如果看不懂其中的某一个,那么就听我道来~1publicclassDemon02{2publicstaticvoidmain(String[]args){3inta=1;4System.out.println(a);5changeNumber(a);6......
  • 题解 CF379D New Year Letter
    思路提供一种比较容易想到的做法。拿到题看数据范围发现都很小,所以放心大胆地暴力。容易发现\(s_i\)中AC的个数等于\(s_{i-2}\)中AC的个数加\(s_{i-1}\)中AC的个数再加上两者拼接处可能有的一个AC。所以\(s_1\)和\(s_2\)从第二个字符到倒数第二个字符这之间......
  • ifconfig与ipconfig的区别
    转自:ipconfig和ifconfig区别_明子~的博客-CSDN博客简单来说,ipconfig是Windows中显示当前TCP/IP配置信息,而ifconfig是Linux中网络适配器的查看指令。1.ipconfig:Windows中ipconfig实用程序可用于显示当前TCP/IP配置的设置值。这些信息一般用来检验人工配置的TCP/IP设置是否正确。......
  • python中function使用class调用和使用对象调用的区别
    问题在python中,class中函数的定义中有一个特殊的self指针,如果一个函数有一个self参数,通常意味着这是一个非静态函数,也就是调用的时候第一个参数是对象指针,只是这个指针是调用这个函数时由python来自动填充。tsecer@harry:catcls_mth.pyclasstsecer():defharry(self):......
  • Python中os._exit(), sys.exit(), exit() 的区别
    在Python3.x中,os._exit(),sys.exit(),和exit()是三个不同的终止程序执行的函数,它们之间有一些区别:os._exit():这个函数是os模块中的一个函数,它用于直接终止程序的执行,并且不会触发任何清理活动或关闭程序中的资源。它不会抛出任何异常或执行任何finally子句。使用os._exit(......
  • React和Vue的区别,大家怎么看?
    Vue更适合小项目,React更适合大公司大项目;Vue的学习成本较低,很容易上手,但项目质量不能保证......真的是这样吗?借助本篇文章,我们来从一些方面的比较来客观的去看这个问题。 论文档的丰富性从两个方面来看这个问题:社区的支持力度及文档的完善性。 对于任何编程语......
  • CyclicBarrier和CountDownLatch的区别
    引言在并发编程中,CyclicBarrier和CountDownLatch是两个常用的同步工具类。它们都可以用于线程之间的等待和协调,但在使用方式和功能上有一些区别。本文将深入探讨CyclicBarrier和CountDownLatch的区别,并给出相应的代码示例。CyclicBarrier和CountDownLatch简介CyclicBarrierCycl......
  • cookie和session的区别及原理
    Cookie概念在浏览某些网站时,这些网站会把一些数据存在客户端,用于使用网站等跟踪用户,实现用户自定义功能.是否设置过期时间:如果不设置过期时间,则表示这个Cookie生命周期为浏览器会话期间,只要关闭浏览器,cookie就消失了.这个生命期为浏览会话期的cookie,就是会话C......
  • 计算机网络中速率和带宽的区别
    速率,指的是连接在计算机网络上的主机在数字信道上传送数据的速率,它也称为数据率或比特率,单位是bps。速率往往指的是额定速率或者标称速率,意思也就是在非常理想的情况下才能达到的数据传送的速率,然而在现实生活中是达不到的。带宽,在计算机网络中用来表示网络的通信线路传送数据的能......
  • NEW learning : Regular Expression
    STEP1:TheprimaryformulaintheREcodebase:   result=re.match(pattern,str)#pattern为要校验的规则#str为要进行校验的字符串>>>importre>>>print(re.match('www','www.runoob.com').span())#在起始位置匹配(0,3)>>>......