重写、隐藏基类(new, override)的方法
public class Father
{
public void Write() {
Console.WriteLine("父");
}
}
public class Mother
{
public virtual void Write()
{
Console.WriteLine("母");
}
}
public class Boy : Father
{
public new void Write()
{
Console.WriteLine("子");
}
}
public class Girl : Mother
{
public override void Write()
{
Console.WriteLine("女");
}
}
static void Main(string[] args)
{
Father father = new Boy();
father.Write();
Boy boy = new Boy();
boy.Write();
Mother mother = new Mother();
mother.Write();
Girl girl = new Girl();
girl.Write();
Console.ReadLine();
}
输出:
父
子
母
女
public class Boy : Father
{
public new void Write()
{
base.Write();
Console.WriteLine("子");
}
}
public class Girl : Mother
{
public override void Write()
{
base.Write();
Console.WriteLine("女");
}
}
输出:
父
父
子
母
母
女
可见,在程序运行结果上new 和override是一样的。
相关推荐
-
C# new和override的区别分析
昨天面试问到了new的几种用法以及与Override的区别,有点模糊 回来google下,new的用法有以下3中 1.运算符:初始化对象和调用构造函数 2.修饰符:隐藏基类方法 3.于在泛型声明中约束可能用作类型参数的参数的类型 至于作为修饰符和override的区别,看了下文章不太明白,写了个例子,运行结果,发现了差异,下面分享下代码: using System; using System.Collections.Generic; using System.Linq; using System
-
C++中Overload,Override,Hide之间的区别
一. 简介•Overload: 重载,指函数同名,但是参数个数不同.或者参数类型不同的多个实现.(如果参数相同但是仅仅返回值不同不是重载,编译器会报错.) 编译器判断重载函数:•第一步,是确定该调用中所考虑的重载函数的集合,该函数集合被称为候选函数(candidant function).所谓候选函数就是与被调用函数同名的函数. •第二步,分为两动作:第一个动作是编译器从第一步选出的候选函数中调出可行函数(viable function).可行函数的函数参数个数与调用的函数参数个数相同,或者可行
-
解析abstract与override究竟可不可以同时使用
一个属性或方法可以同时被abstract 和override 修饰吗?我的一个同事这样问我.我最初的反应是:"当然不可以",但是事实上证明的确是可以一起修饰的. 对于这个问题,我认真的思考了下,这种方式虽然少见,但是却是合法的甚至还有点意义. 假设我们有一个非常大的,复杂的类型,让我们叫他"Thingy": abstract class Thingy{ public virtual string Name { get { return "";
-
重写、隐藏基类(new, override)的方法
复制代码 代码如下: public class Father { public void Write() { Console.WriteLine("父"); } } public class Mother { public virtual void Write() { Console.WriteLine("母"); } } pub
-
python 接口_从协议到抽象基类详解
抽象基类的常见用途:实现接口时作为超类使用.然后,说明抽象基类如何检查具体子类是否符合接口定义,以及如何使用注册机制声明一个类实现了某个接口,而不进行子类化操作.最后,说明如何让抽象基类自动"识别"任何符合接口的类--不进行子类化或注册. Python文化中的接口和协议 接口在动态类型语言中是怎么运作的呢?首先,基本的事实是,Python语言没有 interface 关键字,而且除了抽象基类,每个类都有接口:类实现或继承的公开属性(方法或数据属性),包括特殊方法,如__getitem_
-
基于python3 类的属性、方法、封装、继承实例讲解
Python 类 Python中的类提供了面向对象编程的所有基本功能:类的继承机制允许多个基类,派生类可以覆盖基类中的任何方法,方法中可以调用基类中的同名方法. 对象可以包含任意数量和类型的数据. python类与c++类相似,提供了类的封装,继承.多继承,构造函数.析构函数. 在python3中,所有类最顶层父类都是object类,与java类似,如果定义类的时候没有写出父类,则object类就是其直接父类. 类定义 类定义语法格式如下: class ClassName: <statement
-
c#隐藏基类方法的作用
当派生类和基类有同样的的方法(方法名相同.参数列表相同和返回值相同),这时派生类的方法可以隐藏基类的方法.也就是说可以在派生类中创建和基类方法相同的方法,但是执行的过程却不同,并且需要使用new关键字. 复制代码 代码如下: class program{ static void Main(string[] args) { B b=new B(); b.F(); A a=b; a.F(); Console.ReadKey(); } } class A { public void F() { Con
-
C++基类指针和派生类指针之间的转换方法讲解
函数重载.函数隐藏.函数覆盖 函数重载只会发生在同作用域中(或同一个类中),函数名称相同,但参数类型或参数个数不同. 函数重载不能通过函数的返回类型来区分,因为在函数返回之前我们并不知道函数的返回类型. 函数隐藏和函数覆盖只会发生在基类和派生类之间. 函数隐藏是指派生类中函数与基类中的函数同名,但是这个函数在基类中并没有被定义为虚函数,这种情况就是函数的隐藏. 所谓隐藏是指使用常规的调用方法,派生类对象访问这个函数时,会优先访问派生类中的这个函数,基类中的这个函数对派生类对象来说是隐藏起来的.
-
python抽象基类用法实例分析
本文实例讲述了python抽象基类用法.分享给大家供大家参考.具体如下: 定义抽象类,需要使用abc模块,该模块定义了一个元类(ABCMeata),和装饰器 @abstractmethod, @abstractproperty 如果要实例化继承了Foo 的子类,子类必须实现了Foo所有的抽象方法(跟java一样),否则实例化报错. 抽象类不能直接实例化 #!coding=utf-8 from abc import ABCMeta, abstractmethod, abstractproperty
-
PHP中用接口、抽象类、普通基类实现“面向接口编程”与“耦合方法”简述
复制代码 代码如下: <?php /* 边学边做的,为方便自己翻阅而发布,更为得到高人指点而发布,欢迎高手指点...... [提示]本例通过测试无误 [情景设计] 模拟计算机主板IDE接口,比如:主板可以存取的储存器常常有光驱.硬盘.闪存等等, 为了方便,有必要对这些不同的储存器设定同一的接口. 本例还假设一种前所未有的.存取方式与众不同的外星储存器也要加到主板上进行存取, 于是需要采用耦合的设计模式. [本例主要讲述] 1.通过接口.抽象类.一般类继承三种方式达到所谓的"接口"
-
C++ 基类指针和子类指针相互赋值的实现方法
首先,给出基类animal和子类fish //============================================================== // animal.h // // author : zwq // describe: 非虚函数情况下,将子类指针赋给积累指针,验证最终调用 // 基类函数还是子类函数. //============================================================== #ifndef ANIMA
-
浅谈thinkphp的nginx配置,以及重写隐藏index.php入口文件方法
1,心血来潮,把ThinkPHP项目部署到了nginx上,以上是在apache上跑的.突然发现nginx不支持pathinfo功能,难怪在TP中调怎么都没管用. 2,开始上文件了,比网上其他一些杂的好多了: server { listen 80; #listen [::]:80; server_name www.tp.com tp.com; index index.html index.htm index.php default.html default.htm default.php; roo
-
Python抽象基类的定义与使用方法
目录 1.定义抽象基类的子类 2.标准库中的抽象基类 3.定义抽象基类 4.再看白鹅类型 前言: 我们写Python基本不需要自己创建抽象基类,而是通过鸭子类型来解决大部分问题.<流畅的Python>作者使用了15年Python,但只在项目中创建过一个抽象基类.我们更多时候是创建现有抽象基类的子类,或者使用现有的抽象基类注册.本文的意义在于,了解抽象基类的定义与使用,可以帮助我们理解抽象基类是如何实现的,为我们以后学习后端语言(比如Java.Golang)打下基础.毕竟抽象基类是编程语言通用设
随机推荐
- JavaScript XML实现两级级联下拉列表
- SQLSERVER中union,cube,rollup,cumpute运算符使用说明
- jquery中的$(document).ready()与window.onload的区别
- vue.js入门教程之绑定class和style样式
- 关于Poi读取Excel引发内存溢出问题的解决方法
- JavaScript ES6中CLASS的使用详解
- ASP.NET简单获取服务端和客户端计算机名称的方法
- 用Simple Excel导出xls实现方法
- PHP使用strrev翻转中文乱码问题的解决方法
- C#使用DllImport调用非托管的代码的方法
- 探讨register关键字在c语言和c++中的差异
- 经测试最好用的mysql密码忘记的解决方法
- 在ASP里面创建GUID
- jquery常用操作小结
- Jquery方式获取iframe页面中的 Dom元素
- java中UDP简单聊天程序实例代码
- C#使用HtmlAgilityPack抓取糗事百科内容实例
- C++11的for循环,以及范围Range类的简单实现
- Cisco路由器交换机配置命令详解
- node.js多个异步过程中判断执行是否完成的解决方案