【基础知识】.Net基础加强第三天
一、 里氏替换原则--类型转换
1、 里氏替换原则:当需要一个父类类型对象的时候,可以给一个子类类型的对象。
2、 里氏替换原则实际也就是发生了隐身转换
3、 a.>把子类类型赋值给父类类型,发生了隐式类型。
b> 把父类类型变量赋值给子类类型,需要显式类型转换。
C>前提是如果这个父类类型变量p中,指向的确实是一个子类对象,则可以显式类型转换,如果p指向的不是子类的对象,则显式转换会报异常。(转换失败) is-a可以用来验证继承关系中是否合理
4、 =======================as===================
//如果转换成功则将结果赋值给cn变量,
//如果转换失败也不报错,会将null值赋值给cn;
//最好在转换后,加一个cn是否为null的验证。
Chinese cn = per as Chinese;
if (cn!=null)
{
//做一些事情
}
//如果转换失败会报错!!!
Chinese cn1 = (Chinese)per;
============================================================================
/// <summary>
/// 父类类型作为参数的一种多态
/// </summary>
/// <param name="per"></param>
static void RenKouDengji(Person per)
{
per.DengJi();
}
多态的作用:把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。
==============================================
//如果转换失败报异常
//Chinese newcn = (Chinese)per;
// Chinese newcn = per as Chinese;
////类型转换,如果转换成功,则newcn中为转换后的结果
////如果转换失败,则newcn为null
Chinese newcn = per as Chinese;
二、 抽象类
1、 抽象方法不能有任何方法体。(不能有任何实现)public abstract void Show();
2、 抽象成员必须写在抽象类中。不能写在一个实例中。这个类也必须标记为abstract(抽象的)。
3、 父类中的抽象成员,子类继承后必须重写(例外:除非子类也是一个抽象类)
4、 抽象类中可以有抽象成员
5、 抽象类是不能被实例化的。(抽象类的作用就是为了继承)
6、 抽象类的特点总结
1> 抽象成员必须标记为abstract,并且不能有任何实现。
2> 抽象成员必须在抽象类中。
3> 抽象类不能被实例化。
4> 子类继承抽象类后,必须把父类中的所有抽象成员都重写。(除非子类也是抽象类,则可以不用重写)
5> 抽象成员的访问修饰符不能是private
6> 在抽象类中可以包含实例成员
7> 抽象类是有构造函数的,虽然不能实例化
7、 什么时候用抽象类,什么时候用virtual虚方法
1> 如果父类中的方法有默认的实现,并且父类需要实例化,这是可以考虑将父类定义成一个普通类,使用virtual虚方法来实现多态。
2> 如果父类中的方法没有默认的实现,父类也不需要被实例化,则可以将该类定义为抽象类。
3> 类中的成员如果不写访问修饰符默认是私有的
8、 new关键字隐藏父类的成员(用的很少)
1> 表示在子类中隐藏了从父类继承过来的那个虚方法,
子类类型 obj = new 子类类型
2> 用new标记的方法是子类中的一个全新的方法,与从父类中继承过来的方法没有一点关系(断截了)
3> 不能多态了。
9、 简单工厂设计模式
各种设计模式的本质都是:多态。(充分理解多态,再看设计模式就会觉得轻松很多。)
三、 接口(使用规范,给接口起名字是以I开头,able结尾)
1、 什么是接口?
1> 接口就是一种规范.约定好遵守某种规范就可以写通用的代码。
2、 接口的语法特点
1> 接口中只能包含方法(方法,属性,索引器,事件);
2> 接口中的方法也不能有任何实现(就像抽象方法一样,直接加分号);
3> 接口中的成员不能有任何访问修饰符(哪怕是public),默认是public;
4> 接口不能被实例化;
5> 实现接口的类,必须实现接口中所有的成员;
3、 都已经有类实现多态了,为什还要接口呢?
(1) 继承具有单根性,不能多继承。接口却可以多实现。
(2) 接口的主要目的就是要实现多态。
(3) 当同一个类同时继承了某个类,并且也实现了某个接口的时候,必须要将继承的类写到第一个位置。





Public class Student : Person : IFlyable{}
(4) 当多个类型,都具有某个或某个功能时(方法),但是这几个类型又属于不同的系列(这几个类型没有共同的父类,这时就不能用抽象类了。),所以这时,为了实现多态就可以考虑把这几个类型的共有的方法提取到一个接口中,让这几个类型分别实现该接口。
(5) 如果一个类实现了一个接口,那么继承他的子类也会有接口里的内容。这个类的类型和这个类子类的类型都是他接口的类型(I…able)
4、 老师的建议:
建议:不要在一个接口中写过多的方法,避免造成接口污染。可以编写多个接口,在每个接口中,分别定义方法。(最终的是有还是要根据需求来定)
5、 显示实现接口:接口名.接口的方法IFlyable.Fly();
【基础知识】.Net基础加强第三天的更多相关文章
- Linux基础知识与基础命令
Linux基础知识与基础命令 系统目录 Linux只有一个根目录,没有盘符的概念,文件目录是一个倒立的树形结构. 常用的目录功能 bin 与程序相关的文件 boot 与系统启动相关 cdrom 与Li ...
- Java基础知识二次学习--第三章 面向对象
第三章 面向对象 时间:2017年4月24日17:51:37~2017年4月25日13:52:34 章节:03章_01节 03章_02节 视频长度:30:11 + 21:44 内容:面向对象设计思 ...
- java线程基础知识----线程基础知识
不知道从什么时候开始,学习知识变成了一个短期记忆的过程,总是容易忘记自己当初学懂的知识(fuck!),不知道是自己没有经常使用还是当初理解的不够深入.今天准备再对java的线程进行一下系统的学习,希望 ...
- day63:Linux:nginx基础知识&nginx基础模块
目录 1.nginx基础知识 1.1 什么是nginx 1.2 nginx应用场景 1.3 nginx组成结构 1.4 nginx安装部署 1.5 nginx目录结构 1.6 nginx配置文件 1. ...
- 这些C++基础知识的基础知识你都学会了吗?
一.C++基础知识 新的数据类型 C语言中的数据类型 C++中新的数据类型 思考:新的数据类型有什么好处?请看下面的代码: 可以见得:新的类型使整个程序更加简洁,程序变得易读易懂!这个就是bool ...
- 网络基础知识(一)wireshark 三次握手实践
wireshark 三次握手简介 192.168.18.120 IP地址为我的本机虚拟机IP地址 过滤设置:ip.addr == 192.168.18.120 (ip.addr == 192.168. ...
- 【Unity3D游戏开发】基础知识之Tags和Layers (三二)[转]
Tags和Layers分别表示是Unity引擎里面的标签和层,他们都是用来对GameObject进行标识的属性,Tags常用于单个GameObject,Layers常用于一组的GameObject.添 ...
- Ceph基础知识和基础架构认识
1 Ceph基础介绍 Ceph是一个可靠地.自动重均衡.自动恢复的分布式存储系统,根据场景划分可以将Ceph分为三大块,分别是对象存储.块设备存储和文件系统服务.在虚拟化领域里,比较常用到的是Cep ...
- Ceph 基础知识和基础架构认识
1 Ceph基础介绍 Ceph是一个可靠地.自动重均衡.自动恢复的分布式存储系统,根据场景划分可以将Ceph分为三大块,分别是对象存储.块设备存储和文件系统服务.在虚拟化领域里,比较常用到的是Cep ...
- 算法导论 - 基础知识 - 算法基础(插入排序&归并排序)
在<算法导论>一书中,插入排序作为一个例子是第一个出现在该书中的算法. 插入排序: 对于少量元素的排序,它是一个有效的算法. 插入排序的工作方式像许多人排序一手扑克牌.开始时,我们手中牌为 ...
随机推荐
- 即时新闻展示插件jQuery News Ticker,超级简单!
有时候我们为了节省页面空间,会在页面明显处放一小条,用来展示比较重要的即时新闻,一般以轮播的形式出现.今天要介绍的jQuery News Ticker插件就是用来实现这个即时新闻展示功能的,效果图如下 ...
- MySQL Sakila样本数据库
Sakila样本数据库介绍 Sakila样本数据库是MySQL官方提供的一个模拟DVD租赁信息管理的数据库,提供了一个标准模式,可作为书中例子,教程.文章.样品,等等,对学习测试来说是个不错的选择. ...
- 17、enum简介
enum简介 在日常开发中可能有一些东西是固定的,比如一年只有4个季节,春夏秋冬.我们可以自己定义一个类里面存放这4个季节.在jdk5之后,引入了枚举(enum)的概念,可以通过enum去定义这四个季 ...
- Electron build 无法下载 winCodeSign 等资源
将 7z 文件下载到 以下 cache 目录并解压 macOS: ~/Library/Caches/electron-builder Linux: ~/.cache/electron-builder ...
- 富文本存储型XSS的模糊测试之道
富文本存储型XSS的模糊测试之道 凭借黑吧安全网漏洞报告平台的公开案例数据,我们足以管中窥豹,跨站脚本漏洞(Cross-site Script)仍是不少企业在业务安全风险排查和修复过程中需要对抗的“大 ...
- 使用隐藏form表单下载文件,解决url方式下载,由于环境问题而限制url长度,满足不了所有的需求!
一 对于某些环境导出是直接用wiondow.href=url直接导出下载,有些业务需求,如员工档案等字段比较多的时候,全选导出就会引发异常,由于Nginx转发长度限制的问题, 如果运维不愿意改变环境, ...
- angular select ng-change实时获取value
<select ng-model="vm.selectVal" ng-options="o.id as o.title for o in vm.optionsDat ...
- Python和MySQL数据库交互PyMySQL
Python数据库操作 对于关系型数据库的访问,Python社区已经指定了一个标准,称为Python Database API SepcificationV2.0.MySQL.Qracle等特定数据库 ...
- Linux压缩打包方法连载之三:bzip2, bzcat 命令
Linux压缩打包方法有多种,本文集中讲解了bzip2, bzcat 命令的使用.案例说明,例如# 与 gzip 同样的,都是在计算压缩比的参数,-9 最佳,-1 最快. AD: 我们遇见Linux压 ...
- github 优秀的开源项目
https://github.com/wlcaption/AndroidMarket---- 这是手机应用商店,包含应用的下载,用户中心等内容 https://github.com/wlcaption ...