扩:new and override
2016-02-22 14:04
162 查看
昨天有个网友问我继承里面的new和override关键词有啥区别,呃,我们来看个例子就知道了
new ==》隐藏父类同名方法 override==》覆盖
定义一个父类:
定义一个子类:
调用一下
输出:
可以发现,用new修饰的方法,其父方法并没有被改变,只是被隐藏了
用override重写的方法却被覆盖,从而改变了(多态)
new ==》隐藏父类同名方法 override==》覆盖
定义一个父类:
public class People { /// <summary> ///ushort参考: https://msdn.microsoft.com/zh-CN/library/cbf1574z.aspx /// </summary> public string Name { get; set; } public ushort Age { get; set; } public People(string name, ushort age) { this.Name = name; this.Age = age; } public void Hi()//People { Console.WriteLine("Name: " + this.Name + " Age: " + this.Age); } public virtual void Show()//People { Console.WriteLine("Name: " + this.Name + " Age: " + this.Age); } }
定义一个子类:
public class Student : People { #region 属性 /// <summary> /// 学校 /// </summary> public string School { get; set; } /// <summary> /// 班级 /// </summary> public string StrClass { get; set; } /// <summary> /// 学号 /// </summary> public string StrNum { get; set; } #endregion #region 构造函数 /// <summary> /// 调用父类构造函数 /// </summary> /// <param name="name"></param> /// <param name="age"></param> public Student(string name, ushort age) : base(name, age) { } public Student(string name, ushort age, string school, string strClass, string strNum) : this(name, age) { this.School = school; this.StrClass = strClass; this.StrNum = strNum; } #endregion /// <summary> /// new-隐藏 /// </summary> public new void Hi()//Student { Console.WriteLine("Name: " + this.Name + " Age: " + this.Age + " School: " + this.School + " strClass: " + this.StrClass + " strNum: " + this.StrNum); } /// <summary> /// override-覆盖 /// </summary> public override void Show()//Student { Console.WriteLine("Name: " + this.Name + " Age: " + this.Age + " School: " + this.School + " strClass: " + this.StrClass + " strNum: " + this.StrNum); } }
调用一下
static void Main(string[] args) { People p = new Student("app", 10, "北京大学", "001", "01001"); p.Hi(); p.Show(); System.Console.WriteLine(); Student s = p as Student; s.Hi(); s.Show(); System.Console.ReadKey(); }
输出:
可以发现,用new修饰的方法,其父方法并没有被改变,只是被隐藏了
用override重写的方法却被覆盖,从而改变了(多态)
相关文章推荐
- POJ 2342 树形DP入门题
- 广告点击率预估中的特征选择
- 度量平台项目中菜单的含义及运用
- Git分布式版本控制系统最佳实践
- js大型架构之Facade模式
- 关于'for' loop initial declaration used outside C99 mode的说明
- android sdk镜像站点
- 【C++11新特性】 Lambda表达式
- Android内存优化杂谈
- UIPickerView
- 2014年最新前端开发面试题(题目列表+答案 完整版)
- 谈一谈前端多容器(多webview平台)处理方案
- android sdk更新代理设置
- 超人抢QQ红包助手
- 使用Charles3.11.2过程(附加下载Mac)
- Android系统介绍与框架
- 关于View的一些问题
- golang语法总结(十五):数组array与切片slice
- telnet localhost 8080连接上后 输入但是不能显示正常
- 数据库 根据A表 更新B表