基础才是重中之重~方法override详解
之所以写这篇文章,完全是因为这次代码审核,这次代码审核过程当中,出现了很多我认为基础知识不够扎实的问题,所以,打算把它们记录下来,共大家分享。
方法的override,即方法的覆写或者重写,有时还是习惯叫它英文override,它是指将父类的abstract或者virtual方法进行重新设计,可以将新的功能加入其中,看起来很不错,但在使用过程中,有时我们可能拿不准它,下面我说几点:
一 父类是抽象类,这时,它的实例化需要通过子类来完成,这时的override是子类最后重写的
二 父类是普通类,这时,它的实例化工作如果由自己完成,结果就是父类virtual的结果,与它的子类无关。
三 父类是普通类,它的实例化工作如果由子类完成,那么,它的结果就是子类方法override的结果
OK,下面我们来说一下例子,它由father类和sons类组成,father类是一个普通类,在这实现当中,它很可能是个泛型类,如仓储模式的实现
/// <summary>
/// 一个爸爸
/// </summary>
class Father
{
public virtual void print()
{
Console.WriteLine("我是爸爸");
}
}
下面是儿子A对爸爸的print方法的重写工作
/// <summary>
/// 一个儿子A
/// </summary>
class SonA : Father
{
public override void print()
{
Console.WriteLine("我是儿子");//override father class print method.
} public void sonPrint()
{
base.print(); //我是爸爸
print();//我是儿子 }
}
而下面是对print方法的各种调用工作,包括了实现化的方式
static void Main(string[] args)
{ SonA son = new SonA();
son.sonPrint(); //我是爸爸,我是儿子
Father father = new Father();
father.print();//我是爸爸
Father son2 = new SonA();
son2.print();//儿是儿子
}
OK,通过结果我们可以看出:
在儿子类里,base.print()方法走的是爸爸的print;print走的是儿子
在儿子类以外,使用爸爸自己去实例化后,print走的是爸爸的;使用儿子进行实例化后,print方法走的是儿子重写后的;
基础才是重中之重~方法override详解的更多相关文章
- WPF MVVM UI分离之《交互与数据分离》 基础才是重中之重~delegate里的Invoke和BeginInvoke 将不确定变为确定系列~目录(“机器最能证明一切”) 爱上MVC3系列~全局异常处理与异常日志 基础才是重中之重~lock和monitor的区别 将不确定变成确定~我想监视我的对象,如果是某个值,就叫另一些方法自动运行 将不确定变成确定~LINQ DBML模型可以对
WPF MVVM UI分离之<交互与数据分离> 在我们使用WPF过程中,不可避免并且超级喜欢使用MVVM框架. 那么,使用MVVM的出发点是视觉与业务逻辑分离,即UI与数据分离 诸如下 ...
- Java基础-反射(reflect)技术详解
Java基础-反射(reflect)技术详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.类加载器 1>.JVM 类加载机制 如下图所示,JVM类加载机制分为五个部分 ...
- Java基础13:反射与注解详解
Java基础13:反射与注解详解 什么是反射? 反射(Reflection)是Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性. Orac ...
- [转]js中几种实用的跨域方法原理详解
转自:js中几种实用的跨域方法原理详解 - 无双 - 博客园 // // 这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同 ...
- C#虚方法virtual详解
转: http://www.cnblogs.com/jason_yjau/archive/2009/08/25/1553949.html C#虚方法virtual详解 在C++.Java等众多OOP语 ...
- GoLang基础数据类型--->字典(map)详解
GoLang基础数据类型--->字典(map)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 可能大家刚刚接触Golang的小伙伴都会跟我一样,这个map是干嘛的,是 ...
- GoLang基础数据类型-切片(slice)详解
GoLang基础数据类型-切片(slice)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 数组的长度在定义之后无法再次修改:数组是值类型,每次传递都将产生一份副本.显然这种数 ...
- GoLang基础数据类型--->数组(array)详解
GoLang基础数据类型--->数组(array)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Golang数组简介 数组是Go语言编程中最常用的数据结构之一.顾名 ...
- 4.C#虚方法virtual详解
C#虚方法virtual详解 在C++.Java等众多OOP语言里都可以看到virtual的身影,而C#作为一个完全面向对象的语言当然也不例外. 虚拟函数从C#的程序编译的角度来看,它和其它一般的函数 ...
随机推荐
- OD使用教程12
载入程序输入关键字: 双击进入程序 仔细看发现并没有跳转直接跳到这个mov,往上看发现retn上面有一个push,在这种编写手法当中这种组合相当于一个jmp, 跳到离它最近的一个值(在这就是004A5 ...
- 【章老师的课程】Black Box Testing
本周我们学习了黑盒测试,这是一种常用的软件测试方法,它将被测软件看作一个打不开的黑盒,主要根据功能需求设计测试用例,进行测试.本章主要介绍几种常用的黑盒测试方法和黑盒测试工具,并通过实例介绍各种方法的 ...
- Tabs - 标签页
<div class="J_TWidget tab" data-widget-type="Tabs"style="width:宽度px; hei ...
- Web调用FastReport的配置问题
1.修改配置webconfig文件 IIS6: <system.web> <httpHandlers> <add path="FastReport.Export ...
- 如何将动态生成Word文件
大致的思路是先用office2003或者2007编辑好Word的样式,然后另存为XML,将XML翻译为FreeMarker模板,最后用Java来解析FreeMarker模板并输出Doc.经测试这样方式 ...
- 【Android UI】Android Layout XML属性
Layout对于迅速的搭建界面和提高界面在不同分辨率的屏幕上的适应性具有很大的作用.这里简要介绍Android的Layout和研究一下它的实现. Android有Layout:FrameLayout, ...
- Activity劫持实例与防护手段
原文地址:Activity劫持实例与防护手段 作者:cjxqhhh (本文只用于学习技术,提高大家警觉,切勿用于非法用途!) 什么叫Activity劫持 这里举一个例子.用户打开安卓手机上的某 ...
- 解决hadoop启动后datanode无法启动问题
hadoop部署完成后datanode无法启动问题解决 1.检查是否有遗留的hadoop进程还在运行,如果有的话,先stop-all.sh或kill杀掉: 2.在master节点上,删除/tmp/ha ...
- Linux下安装tomcat
安装tomcat之前首先安装jdk,这个看前面的帖子. 下面说centeros6.5安装tomcat7的方法: 1.将apache-tomcat-7.0.29.tar.gz文件上传到/home/zha ...
- LiveCD DSET日志收集
DELL的LiveCD是一张PE光盘,最新版本7.1是基于CentOS 6.2系统的. 工具下载地址: http://downloads.dell.com/FOLDER01960516M/1/SL ...