c# 继承,多态,new /overrid 区别, 引用父类的方法
好久没碰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 区别, 引用父类的方法的更多相关文章
- Python开发基础-Day20继承实现原理、子类调用父类的方法、封装
继承实现原理 python中的类可以同时继承多个父类,继承的顺序有两种:深度优先和广度优先. 一般来讲,经典类在多继承的情况下会按照深度优先的方式查找,新式类会按照广度优先的方式查找 示例解析: 没有 ...
- python基础之继承实现原理、子类调用父类的方法、封装
继承实现原理 python中的类可以同时继承多个父类,继承的顺序有两种:深度优先和广度优先. 一般来讲,经典类在多继承的情况下会按照深度优先的方式查找,新式类会按照广度优先的方式查找 示例解析: 没有 ...
- Python设计模式 - 基础 - 封装 & 继承 & 多态
面向对象的核心是对象,世间万物都可以看作对象,任何一个对象都可以通过一系列属性和行为来描述,可以包含任意数量和类型的数据或操作.类是用来描述具有相同属性和方法的所有对象的集合.类通常是抽象化的概念,而 ...
- Java基础语法<八> 继承 多态 抽象 反射
1.超类和子类 超类和子类 父类与子类 多态: 一个对象变量可以指示多种实际类型的现象称为多态 一个变量可以引用父类对象,也可以引用其子类对象,这就是多态. 不能将一个超类的引用赋给子类变量,因为调用 ...
- Python面向对象,析构继承多态
析构: def __del__(self): print("del..run...") r1 = Role("xx") del r1 结果打印del..run. ...
- python使用super()调用父类的方法
如果要在子类中引用父类的方法,但是又需要添加一些子类所特有的内容,可通过类名.方法()和super()来调用父类的方法,再个性化子类的对应函数. 直接使用类名.方法()来调用时,还是需要传入self为 ...
- 第7.22节 Python中使用super调用父类的方法
第7.22节 Python中使用super调用父类的方法 前面章节很多地方都引入了super方法,这个方法就是访问超类这个类对象的.由于super方法的特殊性,本节单独谈一谈super方法. 一.su ...
- -1-2 java 面向对象基本概念 封装继承多态 变量 this super static 静态变量 匿名对象 值传递 初始化过程 代码块 final关键字 抽象类 接口 区别 多态 包 访问权限 内部类 匿名内部类 == 与 equal
java是纯粹的面向对象的语言 也就是万事万物皆是对象 程序是对象的集合,他们通过发送消息来相互通信 每个对象都有自己的由其他的对象所构建的存储,也就是对象可以包含对象 每个对象都有它的类型 也就是 ...
- [Java]重载,重写以及继承,多态的区别
转自:http://android.blog.51cto.com/268543/53181 什么是多态?它的实现机制是什么呢?重载和重写的区别在那里?这就是这一次我们要回顾的四个十分重要的概念:继承. ...
随机推荐
- 2016 版 Laravel 系列入门教程(二)【最适合中国人的 Laravel 教程】
本教程示例代码见: https://github.com/johnlui/Learn-Laravel-5 在任何地方卡住,最快的办法就是去看示例代码. 本篇文章中,我将跟宝宝们一起学习 Laravel ...
- Daily Scrum – 1/12
Meeting Minutes Merge Wordlist & Word Recite entry. (P0) – Done. Remove "Word Challenge&quo ...
- session的一个问题
<%@ page language="java" import="java.util.*,javax.servlet.http.Cookie.*" pag ...
- hdu3397 线段树 成段更新
这题真的呵呵了.敲了很长时间,调了很多bug,把0 1 输出,解决了.最后想取反,怎么搞都有bug, 最后还是看了大牛们的博客.不过这题真的敲得爽,调bug时基本把线段树过程全部弄了一遍. #incl ...
- <supports-screens>的用法
<supports-screens android:resizeable=["true"| "false"] android:smallScreens=[ ...
- pycharm 常用设置
PyCharm3.0默认快捷键( 1.编辑(Editing) Ctrl + Space 基本的代码完成(类.方法.属性) Ctrl + Alt + Space 快速导入任意类 Ctrl + Shift ...
- [NOIP2008] 提高组 洛谷P1006 传纸条
题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是 ...
- 排序算法二(时间复杂度为O(N*logN))
快速排序: 1 package test; public class QuickSort { // 快速排序 public void quickSort(int s[], int l, int r) ...
- POJ1328Radar Installation(区间点覆盖问题)
Radar Installation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 68597 Accepted: 15 ...
- js中数组以及for循环的使用
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> < ...