C# 学习笔记 多态(二)抽象类
多态是类的三大特性之一,抽象类又是多态的实现方法之一。抽象类是什么呢,如果把虚方法比作一个盛有纯净水的杯子,那么此时的“纯净水”就是事先定义好的方法,我们可以根据不同的需求来改变杯子中所事先盛放的是“纯净水”还是“咖啡”。但是抽象类呢,他更像是一个空的杯子,放在消毒柜中,让有需要的人自己去拿,去决定这个杯子里装什么。这个“杯子”是抽象方法,存放杯子的“消毒柜”是抽象类。
我们用abstract来声明或定义一个抽象类或抽象方法,
//定义一个抽象类
[访问权限] abstract class [类名]
{ } //定义一个抽象方法
[访问权限] abstract [返回类型] [方法名]([参数表]);
这里需要注意的是:
抽象类中可以有抽象方法,也可以没有抽象方法。(“消毒柜”可以存放杯子,也可以存放碗筷)
抽象方法必须存在于抽象类中,并且这个方法不可拥有方法体。(首先杯子需要放在一个干净可以消毒的地方,其次这个杯子是没有被用过的,不然恐怕没有客人想用这个杯子做什么。。)
抽象类无法实例化,只能被继承于他的派生类实例化,也就是说抽象类的存在就是为了被继承。
抽象类中的抽象成员只能在其派生类中使用override关键字进行实现。
抽象类和抽象方法的使用:
//定义一个柜子,柜子里有杯子(此时无法进行实例化)
abstract class Cabinet
{
public abstract void Cup();
} //第一类顾客喜欢喝牛奶
class Customer1:Cabinet
{
public override void Cup()
{
Console.WriteLine("牛奶");
}
} //第二类顾客喜欢喝汽水
class Customer2:Cabinet
{
public override void Cup()
{
Console.WriteLine("汽水");
}
}
将派生类实例化并且进行结果验证:
Cabinet a = new Cabinet(); //会引起不能实例化抽象类的错误 Customer1 a = new Customer1();
a.Cup(); 输出结果:
牛奶 Customer2 b = new Customer2();
b.Cup(); 输出结果:
汽水
这是我理解的抽象类,新手上路,有不对的地方还请各位老司机指出,对自己的收获进行一定的总结,如果能帮到和我一样的新手就再好不过了。晚安世界!
C# 学习笔记 多态(二)抽象类的更多相关文章
- 《Java编程思想》学习笔记(二)——类加载及执行顺序
<Java编程思想>学习笔记(二)--类加载及执行顺序 (这是很久之前写的,保存在印象笔记上,今天写在博客上.) 今天看Java编程思想,看到这样一道代码 //: OrderOfIniti ...
- 【Java学习笔记之二十六】深入理解Java匿名内部类
在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意 ...
- 【转】 Pro Android学习笔记(二二):用户界面和控制(10):自定义Adapter
目录(?)[-] 设计Adapter的布局 代码部分 Activity的代码 MyAdapter的代码数据源和构造函数 MyAdapter的代码实现自定义的adapter MyAdapter的代码继续 ...
- Servlet学习笔记(二)
目录 Servlet学习笔记(二) Request对象 1.request和response对象: 2.request对象继承体系结构: 3.什么是HttpServletRequest ? 4.Htt ...
- Hibernate学习笔记(二)
2016/4/22 23:19:44 Hibernate学习笔记(二) 1.1 Hibernate的持久化类状态 1.1.1 Hibernate的持久化类状态 持久化:就是一个实体类与数据库表建立了映 ...
- X-Cart 学习笔记(二)X-Cart框架1
目录 X-Cart 学习笔记(一)了解和安装X-Cart X-Cart 学习笔记(二)X-Cart框架1 X-Cart 学习笔记(三)X-Cart框架2 X-Cart 学习笔记(四)常见操作 四.X- ...
- C#可扩展编程之MEF学习笔记(二):MEF的导出(Export)和导入(Import)
上一篇学习完了MEF的基础知识,编写了一个简单的DEMO,接下来接着上篇的内容继续学习,如果没有看过上一篇的内容, 请阅读:http://www.cnblogs.com/yunfeifei/p/392 ...
- DuiLib学习笔记(二) 扩展CScrollbar属性
DuiLib学习笔记(二) 扩展CScrollbar属性 Duilib的滚动条滑块默认最小值为滚动条的高度(HScrollbar)或者宽度(VScrollbar).并且这个值默认为16.当采用系统样式 ...
- guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用
guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用 1,大纲 让我们来熟悉瓜娃,并体验下它的一些API,分成如下几个部分: Introduction Guava Collection ...
- Dynamic CRM 2013学习笔记(二十八)用JS动态设置字段的change事件、必填、禁用以及可见
我们知道通过界面设置字段的change事件,是否是必填,是否可见非常容易.但有时我们需要动态地根据某些条件来设置,这时有需要通过js来动态地控制了. 下面分别介绍如何用js来动态设置. 一.动态设 ...
随机推荐
- JS基础语法---do-while循环 + 总结while循环和do-while循环
1. 总结:while循环和do-while循环 while循环特点:先判断,后循环,有可能一次循环体都不执行 do-while循环特点:先循环,后判断,至少执行一次循环体 对比体会: 1. ...
- 一则SQL优化案例
原始sql: select CASE ) counts ,) else deadline end as deadline from t_product_credit) c group by sort ...
- bower私服部署
目录 bower私服部署 简介 工具清单 安装 安装nodejs 安装git 安装private-bower 配置private-bower 启动private-bower 开放端口 开机启动/注册为 ...
- [Linux] docker 方式安装和使用gitlab-ce
gitlab就相当于我们自己内网搭建的git服务,相当于公司内的github. 拉取镜像docker pull gitlab/gitlab-ce 创建宿主机的数据目录mkdir -p /mnt/git ...
- 洛谷 P4316 绿豆蛙的归宿
洛谷 P4316 绿豆蛙的归宿 洛谷传送门 题目背景 随着新版百度空间的上线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 题目描述 给出一个有向无环图,起点为1终点为N,每条边都有一个长度, ...
- layui中form表单渲染的问题
layui 官网的这部分文档介绍:http://www.layui.com/doc/modules/form.html#render 注意:针对的是表单元素,input select textare ...
- MySQL SQL DML (数据操作语言)
包括 SELECT, UPDATE, DELETE, INSERT SELECT 从数据库表中获取数据 用法 SELECT name FROM students; SELECT name,age FR ...
- Python 基础排序算法
冒泡排序(bubble sort) 思路 以升序为例: 从第一个数开始向后两两对比,将大的数一直向后移动,直至最大的数移到最后,再找第二大的数 最好情况:O(n) 一般情况:O(n^2) 最坏情况:O ...
- springboot+shrio简易登录登出和用户权限认证。
源码:https://github.com/huangshengz/myJavaDemo本例子参考:https://www.cnblogs.com/HowieYuan/p/9259638.html 本 ...
- win10 mysql5.7.28 配置安装
如果有服务,使用下面命令删除,管理员身份打开cmd : sc delete mysql 1.下载 https://dev.mysql.com/downloads/mysql/5.7.html 没有的O ...