对C#继承、多态的理解
11月3日 阴天
前两天看某位大牛写的程序,对于C#多态有困惑,今天一大早来查阅了不少资料,自认为有了一个基本的认知,记录下来,一扫今天这阴霾的天气
----------------------------------------------------------------- 我是华丽的分割线 ------------------------------------------------------
1、类的创建:
- 首先用abstract创建抽象父类,在父类钟添加virtual虚方法
- 创建子类继承父类,子类中用override重写父类钟的方法
- 声明一个父类,实例化的时候分别用子类实例化,实现多态
- 实现多态就是在父类的基础上声明多个子类,多个子类对父类分别有不同的方法来实现
2、上代码:
1 //子类3
2 public class Japanese : Person
3 {
4 public override string CallName(string name)
5 {
6 return "我是日本人,我的名字叫:" + name;
7 }
8 }
9 //子类2
10 public class Korea : Person
11 {
12 public override string CallName(string name)
13 {
14 return "我是朝鲜人,我的名字叫:" + name;
15 }
16 }
17 //子类1
18 public class Chinese : Person
19 {
20 public override string CallName(string name)
21 {
22 return "我是中国人,我的名字叫:" + name;
23 }
24 }
25 //父类
26 public abstract class Person
27 {
28 public virtual string CallName(string str) { return str; }
29 }
1 private void button1_Click(object sender, EventArgs e)
2 {
3 Person[] person = {new Chinese(),new Korea(),new Japanese()};
4 foreach (Person p in person)
5 {
6 MessageBox.Show(p.CallName("张三"));
7 }
8 }
3、继承与多态的理解:
- 一个类用abstract关键字修饰那这个类就是抽象类
- 抽象类不能被实例化
- 抽象方法不能有方法体,连{ }都不能有
- 抽象方法只能存在于抽象类中,但是抽象类中可以有非抽象方法
- 抽象类不能是静态类、密封类
- 抽象类中的所有方法必须被子类重写,除非子类也是抽象类
- 抽象方法存在的目的:为了约束类中方法存在的形式(参数列表、return类型)
- base关键字可以用来访问当前对象的基类对象
(PS:第3条的总结参考了网名“刘二雄”的博文,在此表示感谢~)
-------------------------------------------------------------------------------------------------------------------------------------
对C#继承、多态的理解的更多相关文章
- java四大特性理解(封装继承多态抽象)
封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的接口.面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治.封装的对象,这些对象通过一个受保护的接口访问其他对象.封装是一 ...
- Java基础之理解封装,继承,多态三大特性
目录 封装 继承 多态 封装 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 代码理解 publ ...
- Java中的继承、封装、多态的理解
Java中的继承.封装.多态 继承的理解: 1.继承是面向对象的三大特征之一,也是实现代码复用的重要手段.Java的继承具有单继承的特点,每个子类只有一个直接父类. 2.Java的继承通过extend ...
- java多态的理解
面向对象语言中的类有三个特征,封装.继承.多态.封装与继承很好理解,那什么是多态呢? 1.什么是多态? 多态的定义:指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同 ...
- C++学习笔记 封装 继承 多态 重写 重载 重定义
C++ 三大特性 封装,继承,多态 封装 定义:封装就是将抽象得到的数据和行为相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成类,其中数据和函数都是类的成员,目的在于将对 ...
- java面向对象(封装-继承-多态)
框架图 理解面向对象 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程强调的是功能行为 面向对象将功能封装进对象,强调具备了功能的对象. 面向对象是基于面向过程的. 面向对象的特点 ...
- 浅谈学习C++时用到的【封装继承多态】三个概念
封装继承多态这三个概念不是C++特有的,而是所有OOP具有的特性. 由于C++语言支持这三个特性,所以学习C++时不可避免的要理解这些概念. 而在大部分C++教材中这些概念是作为铺垫,接下来就花大部分 ...
- Swift - 43 - 继承, 多态, 析构函数
import Foundation /* 什么叫继承: 可以简单理解为一个类可以从它的父类或者基类中直接拿属性或者方法去使用 冒号":"表示两者之间的继承关系 */ class P ...
- Java继承多态中的方法访问权限控制
java中的方法天生具有继承多态特性,这点与C++有很大不同(需要在父类方发上加virtual关键字),但用起来确实方便了许多. 最简单的继承多态 声明一个接口BaseIF,只包含一个方法声明 pub ...
随机推荐
- 基于Python接口自动化测试框架+数据与代码分离(进阶篇)附源码
引言 在上一篇<基于Python接口自动化测试框架(初级篇)附源码>讲过了接口自动化测试框架的搭建,最核心的模块功能就是测试数据库初始化,再来看看之前的框架结构: 可以看出testcase ...
- redux基础概念及执行流程详解
一.执行流程 全局有一个公共的容器(所有组件都可以操作),我们可以在某个组件中把全局容器中的信息进行修改,而只要全局信息修改,就可以通知所有用到该信息的组件重新渲染(类似于发布订阅)==>red ...
- Csla One or more properties are not registered for this type
在实际运行中,好好运行的程序出现了以下问题: 2019-12-27 10:40:00,164 [DefaultQuartzScheduler_Worker-2] ERROR IBeam.BCPool. ...
- BSGS求解离散对数问题
离散对数问题是求解axΞb mod(n) 同余方程 以下模板使用于gcd(a,n)=1的情况 ; int hs[mod],head[mod],Next[mod],id[mod],top; void i ...
- 曼孚科技:AI机器学习领域常用的15个术语
机器学习是人工智能(AI)的核心,是使计算机具有智能的根本途径. 本文整理了一下机器学习领域常用的15个术语,希望可以帮助大家更好的理解这门涉及概率论.统计学.逼近论.凸分析.算法复杂度理论等多个领 ...
- Babel 7 主要改变
1.不支持Node:0.10,0.12,4,5版本 2.更换命名-@babel/xxx 3.移除以年份命名的presets,统一更换成@babel/preset-env 4.移除 ’Stage‘ pr ...
- springBoot 2.1.5 pom 文件 unknown 错误
插件不兼容 pom文件添加 <properties> <maven-jar-plugin.version>2.6</maven-jar-plugin.version ...
- PP: Imaging time-series to improve classification and imputation
From: University of Maryland encode time series as different types of images. reformulate features o ...
- 二分-E - Rikka with Mutex
E - Rikka with Mutex Sometimes, technical terms implicate some life philosophy. Mutex is one of them ...
- webpack之 plugin(插件)
plugin plugin是插件的意思,通常用来对某个现有的架构就行拓展 webpack中的插件,就是对webpack现有功能的各种扩展,比如打包优化,文件压缩等 loader和plugin区别 lo ...