好久没碰c#了,偶尔需要制作点小工具。为了一个灵活的架构设计,需要对继承/多态有比较深刻的理解。

不料忘得差不多了,好吧,再来回忆下。直接上代码了,如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace TestInherit
{
class A
{
public A()
{
Console.WriteLine("==constructor of A===");
} public void M1()
{
Console.WriteLine("A:M1()");
} public virtual void M2()
{
Console.WriteLine("==abstract method A:M2====");
}
} class B : A
{
public B()
{
Console.WriteLine("==constructor of B===\r\n");
} public new void M1()
{
//base.M1();//通过base引用父类
Console.WriteLine("B:M1()\r\n");
} public override void M2()//abstract 和 virtual 一样,必需配合override使用,不同的是前者不能有具体的方法体。
{
//base.M2();
Console.WriteLine("==concret method B:M2====\r\n");
}
} class Program
{
static void Main(string[] args)
{
Console.WriteLine("====继承测试(new)===========");
B b = new B();
Console.Write("调用子类的同名方法:");
b.M1(); Console.WriteLine("====继承测试(overrid)===========");
B bb = new B();
Console.Write("调用子类的同名方法:");
bb.M2(); Console.WriteLine("====多态测试(new 关键字)===========");
A b2 = new B();
Console.Write("通过父类的引用调用同名方法:");
b2.M1();// new 不支持多态 Console.WriteLine("====多态测试(override 关键字)===========");
A b3 = new B();
Console.Write("通过父类的引用调用同名方法:");
b3.M2();// overrid 不支持多态 Console.Read(); }
}
}

  

 输出如下:

1. 在继承上, new/override没区别

2. 在多态上,new不支持多态,override支持

3. 构造函数会自动调用父类的。其他函数不会,需要显示通过 base.同名方法 进行调用

转载请注明来自:http://www.cnblogs.com/Tommy-Yu/p/4028023.html,谢谢!

最新文章

  1. arcgis_engine_c++_runtime_r6034_error
  2. Oracle---.oracle函数
  3. VC++2010 中Debug和Release配置
  4. java.util.Date转java.sql.Date丢失时间问题
  5. 大数据时代,我们为什么使用hadoop
  6. Java JVM 请别拿“String s=new String("z");创建了多少实例”来面试 [ 转载 ]
  7. JS判断手机当前的系统类型
  8. 基于ELK的数据分析实践——满满的干货送给你
  9. [基础架构]PeopleSoft都有哪些进程运行在进程服务器上
  10. python 编码规范整理
  11. 压力测试工具ab - Apache HTTP server benchmarking tool
  12. C++进阶:新人易入的那些坑 --1.常量、常指针和指针常量
  13. Tomcat配置技巧
  14. Android中一张图片占据的内存大小是如何计算
  15. CentOS7 网络NAT模式
  16. java web (sevlet)请求之get,post,forward,redirect
  17. 最方便最好看最好用的python日志。
  18. vector容器用法详解
  19. AndroidStudio制作个人资料界面模块以及SQLite数据库的使用
  20. Java并发编程:Java的四种线程池的使用,以及自定义线程工厂

热门文章

  1. EntityFramework_MVC4中EF5 新手入门教程之四 ---4.在EF中创建更复杂的数据模型
  2. Linux下巧用my.cnf,mysql连接服务器不需要输入账号密码信息
  3. Daily Scrum – 1/15
  4. 在CentOS上安装Git
  5. PowerDesigner-制作Word导出模版
  6. Java-clone浅/深复制
  7. win10 1607 安装密钥 GVLK
  8. 安卓系统源码编译系列(六)——单独编译内置浏览器WebView教程
  9. 详细解读MySQL中的权限
  10. linux学习笔记二-----文件权限管理