C#基础-方法的重写(new)和覆盖(override)

最近又再看基础知识了。

看到方法的重写(new)和覆盖(override)的时候有点不太懂。

于是百度之。

那答案啊。。。。。

要么就是把覆盖(override)和重载(overlord)混淆了。

要么就是把重写(new)和覆盖(override)说反了。

最后不得已谷歌之。

在stackoverflow里看到一个比较好的答案:

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

virtual: indicates that a function may be overriden by an inheritor

override: overrides the functionality of a virtual function in a base class, providing different functionality.

newhides the original function (which doesn‘t have to be virtual), providing different functionality. This should only be used where it is absolutely necessary.

When you hide a method, you can still access the original method by up casting to the base class. This is useful in some scenarios, but dangerous.

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

翻译过来就是(翻译不对的地方请指正,tks):

override(覆盖):

virtual:表示这个方法也许会被继承者(子方法)覆盖(override)

override:覆盖基类中的虚方法,提供不同的实现方法

new(重写) :

隐藏原始方法(不必是虚方法),提供不同的实现方法。这个(重写)应该仅用于必须要用的地方(也就是一般地方不推荐使用)。

当你隐藏一个方法,你仍然可以访问原始方法通过指向基类。这在一些场景中很有用,但是比较危险。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

所以呢,

override一般是拓展原始虚方法,原始方法必须要加上virtual修饰符。

new 一般是用来拓展原始虚方法,但是不推荐使用。

个人理解,如有不正,不吝赐教!

时间: 2024-10-20 11:11:01

C#基础-方法的重写(new)和覆盖(override)的相关文章

Java类的设计----方法的重写、覆盖

方法的重写.覆盖 在子类中可以根据需要对从父类中继承来的方法进行改造-覆盖方法(方法的重置.重写),在程序执行时,子类的方法将覆盖父类的方法. 覆盖方法必须和被覆盖方法具有相同的方法名称.参数列表和返回值类型. 覆盖方法不能使用比被覆盖方法更严格的访问权限. 覆盖方法举例(1) public class Person { public String name; public int age; public String getInfo() { return "Name: "+ name

JavaSE基础知识(5)—面向对象(方法的重写与重载)

一.重写 1.说明 子类对继承过来的父类的方法进行改造,这种现象称为方法的重写或覆盖或覆写(Override) 2.要求 方法签名完全一致,jdk5.0之后,允许返回类型可以是子类类型,权限修饰符可以更大了 二.重载 1.说明 java中提供了一种机制,允许同一个类中多个同名但参数列表不同的方法存在 2.要求 ①同一个类中②方法名必须相同③参数列表必须不同(参数类型.个数或顺序至少有一样不同)④返回类型无要求⑤修饰符无要求 三.重写与重载对比★   说明 发生范围 方法名 参数列表 返回类型 修

Java——方法的重写(覆盖)

2.2方法的重写(覆盖)(override,orverwrite) 2.2.1 什么时候方法要进行重写? 如果父类中的方法已经无法满足当前子类的业务需求,需要将父类中的方法进行重新写一遍.就是要改变父类的行为. 注意:子类如果重写父类中的方法之后,子类对象一定调用的是重写之后的方法. 2.2.2 发生方法覆盖的条件 ①发生在具有继承关系的两个类之间 ②必须具有相同的方法名,相同的返回值类型,相同的参数列表. ③重写的方法不能比被重写的方法拥有更低的访问权限. ④重写的方法不能比被重写的方法抛出更

odoo9 继承父类的方法和重写父类的方法

在odoo9 中的,要继承父类的方法或重写fulide方法,得先继承基础模块,之后直接继承装饰器就可以了.其中,基础模块是用"Home"代替的. from openerp.addons.web.controllers import main as webmain from openerp.addons.web.controllers.main import Home import re class odoo9login(Home, http.Controller):     @http

《Java中方法的重写》

1 //方法的重写 2 /* 3 注意:方法的重写要遵循“两同两小一大”规则 4 “两同”即方法名相同.形参列表相同: 5 “两小”(1)指的是子类方法返回值类型比父类方法的返回值类型更小或相等,[什么意思?] 6 (2)子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等. 7 “一大”指的是子类方法的访问权限应比父类方法的访问权限更大或者相等. 8 9 特别注意:覆盖方法和被覆盖方法要么都是类方法,要么都是实例方法,不能一个是类方法,一个是实例方法. 10 例如下面代码会引起错误:

重写(overwrite)、重载(overload)和覆盖(override)三者之间的区别

覆盖:子类继承了父类的同名无参函数.当子类从父类继承了一个无参函数,而又定义了一个同样的无参函数,则子类定义的方法覆盖父类的方法,称为覆盖. 重载:子类继承了父类的同名有参函数.当子类继承了父类的一个同名方法,且方法参数不同,称为重载.通过方法的重载,子类可以重新实现父类的某些方法,使其具有自己的特征. 重写:当前类的同名方法.通过方法的重写,一个类可以有多个具有相同名字的方法,由传递给它们不同的个数和类型的参数来决定使用哪种方法.因此,重写的名称是当前类中的同名函数,不是父类中的函数名.

虚方法的重写与普通方法的隐藏的区别;抽象方法和虚方法有什么区别?

两者都可实现对基类方法的重写 ,虚方法在基类中virtual ,在派生类用override关键字修饰,而普通方法的隐藏在基类不用什么修饰符,而在派生类中用new关键字进行重写 ,我想问,它们同样是方法的重写, c#为什么会有两种方法重写方法,这样设计不是重复了呢, 这怎么理解呢? 不重复,首先如果基类里面的virtual方法被子类继承之后,用override重写之后,那么子类里面就只有一个该方法名的方法了.而另一个普通的,就是在子类里面直接通过new 来新建一个方法那叫重载(多态分为重写和重载)

python 类中内置方法的重写

为达成目的,经常会在类中将一些内置方法进行重写,最常见的例如__setattr__,下面就通过内置属性,来查看重写会带来什么变化 先定义一个测试用的类,代码如下 class base: def __init__(self): pass inspect.getmembers(base): # 查看内置属性 打印结果如下 ('__class__', <class 'type'>) ('__delattr__', <slot wrapper '__delattr__' of 'object'

练习目标:继承、多态、方法的重写。

练习目标:继承.多态.方法的重写. 在本练习中,将在银行项目中创建Account的两个子类:SavingAccount 和 CheckingAccount. 创建 Account类的两个子类:SavingAccount(存款账户) 和 CheckingAccount(透支账户)子类 1.修改Account类:将balance属性的访问方式改为protected2.创建 SavingAccount 类,该类继承Account类3.该类必须包含一个类型为double的interestRate(利率)