好久没碰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,谢谢!

c# 继承,多态,new /overrid 区别, 引用父类的方法的更多相关文章

  1. Python开发基础-Day20继承实现原理、子类调用父类的方法、封装

    继承实现原理 python中的类可以同时继承多个父类,继承的顺序有两种:深度优先和广度优先. 一般来讲,经典类在多继承的情况下会按照深度优先的方式查找,新式类会按照广度优先的方式查找 示例解析: 没有 ...

  2. python基础之继承实现原理、子类调用父类的方法、封装

    继承实现原理 python中的类可以同时继承多个父类,继承的顺序有两种:深度优先和广度优先. 一般来讲,经典类在多继承的情况下会按照深度优先的方式查找,新式类会按照广度优先的方式查找 示例解析: 没有 ...

  3. Python设计模式 - 基础 - 封装 & 继承 & 多态

    面向对象的核心是对象,世间万物都可以看作对象,任何一个对象都可以通过一系列属性和行为来描述,可以包含任意数量和类型的数据或操作.类是用来描述具有相同属性和方法的所有对象的集合.类通常是抽象化的概念,而 ...

  4. Java基础语法<八> 继承 多态 抽象 反射

    1.超类和子类 超类和子类 父类与子类 多态: 一个对象变量可以指示多种实际类型的现象称为多态 一个变量可以引用父类对象,也可以引用其子类对象,这就是多态. 不能将一个超类的引用赋给子类变量,因为调用 ...

  5. Python面向对象,析构继承多态

    析构: def __del__(self): print("del..run...") r1 = Role("xx") del r1 结果打印del..run. ...

  6. python使用super()调用父类的方法

    如果要在子类中引用父类的方法,但是又需要添加一些子类所特有的内容,可通过类名.方法()和super()来调用父类的方法,再个性化子类的对应函数. 直接使用类名.方法()来调用时,还是需要传入self为 ...

  7. 第7.22节 Python中使用super调用父类的方法

    第7.22节 Python中使用super调用父类的方法 前面章节很多地方都引入了super方法,这个方法就是访问超类这个类对象的.由于super方法的特殊性,本节单独谈一谈super方法. 一.su ...

  8. -1-2 java 面向对象基本概念 封装继承多态 变量 this super static 静态变量 匿名对象 值传递 初始化过程 代码块 final关键字 抽象类 接口 区别 多态 包 访问权限 内部类 匿名内部类 == 与 equal

    java是纯粹的面向对象的语言 也就是万事万物皆是对象 程序是对象的集合,他们通过发送消息来相互通信 每个对象都有自己的由其他的对象所构建的存储,也就是对象可以包含对象 每个对象都有它的类型  也就是 ...

  9. [Java]重载,重写以及继承,多态的区别

    转自:http://android.blog.51cto.com/268543/53181 什么是多态?它的实现机制是什么呢?重载和重写的区别在那里?这就是这一次我们要回顾的四个十分重要的概念:继承. ...

随机推荐

  1. [C#]MemoryStream.Dispose之后,为什么仍可以ToArray()?

    目录 概述 MemoryStream分析 总结 概述 事件起因,一哥们在群里面贴出了类似下面这样的一段代码: class Program { static void Main(string[] arg ...

  2. Linq之Expression初见

    目录 写在前面 系列文章 Expression 表达式树创建方式 一个例子 总结 写在前面 上篇文章介绍了扩展方法,这篇文章开始将陆续介绍在linq中使用最多的表达式树的相关概念,以概念及例子一一列出 ...

  3. 第三章:Javascript类型、值和变量。

    计算机程序的运行需要对值(value)比如数字3.14或者文本"hello world"进行操作,在编程语言中,能够表示并操作的值的类型叫做数据类型(type),编程语言最基本的特 ...

  4. AngularJS-MVC

    前言: 编程是一个很苦恼的工作,因为需要我们不断的去学习,不断的去专研,我本身就不是一个很喜欢学习的孩子,要不然从小到大也没有成绩好过,但是,我从来没有缺少过勤奋,还是让我们言归正传来说下 我们这段时 ...

  5. iOS-集成阿里百川IMSDK的服务端及客户端

    搜了一下阿里百川, 发现文档很少, 于是就打算写一篇博客, 供后来者少华一些时间在集成和开发上. 客户端集成很简单, 官方文档写的也很清楚. 客户端的集成 Step1 下载SDK包 如果您已经获得De ...

  6. 史上最全的HTML、CSS知识点总结,浅显易懂。

    来源于:http://blog.csdn.net/qiushi_1990/article/details/40260447 一,html+css基础1-1Html和CSS的关系学习web前端开发基础技 ...

  7. oracle练习题后15个

    31,32题更正: SQL> --31. 查询所有教师和同学的name.sex和birthday. SQL> select sname, ssex, sbirthday from stud ...

  8. Eclipse属性文件编辑器---Properties Editor

    今天在用 Eclipse 来编辑 .properties 文件时,写的中文会自动转为 Unicode 编码,完全不知道自己的中文写的是什么!! 于是查了一下,网上推荐,在Eclipse 中 安装一个 ...

  9. Html-input文本框只能输入数字

    onKeyPress="if ((event.keyCode < 48 || event.keyCode > 57)) event.returnValue = false;&qu ...

  10. Java基础-代理

    我们书写执行一个功能的函数时,经常需要在其中写入与功能不是直接相关但很有必要的代 码,如日志记录,信息发送,安全和事务支持等,这些枝节性代码虽然是必要的,但它会带 来以下麻烦: 枝节性代码游离在功能性 ...