总摘要
学习总结刘铁猛老师的课程,写出的如下笔记
接口和抽象类的定义:
- 接口和抽象类,都是“软件工程产物”。
- 具体类->抽象类->接口: 他们是越来越抽象,内部实现的东西越来越少。
(设计模式的学习前提需要透彻理解了接口和抽象类,并能在项目熟练使用。而且需要solid设计原则可以很好运用) - 抽象类是未完全实现逻辑的类(可以有字段和非public成员,他们代表了“具体逻辑”)
- 接口是完全未实现的类(“纯虚类”;只有函数成员;全员public)
- 接口为了解耦而生:高内聚,低耦合的追求;方便单元测试
- 接口是个“协约”
- 他们都不能实例化
( 接口的具体解释接下一部分,此篇主要说的是抽象类)
抽象
从抽象类进行开始,作为切入点则更好理解,所以首先介绍为做基类而生的“抽象类”与“开房/关闭”原则
抽象类
我们平时说类的时候,都是默认的具体类,如果是抽象类一定会特地的说出来。要创建抽象类,一定要加abstract指出来,未被实现的成员,也要用abstract来修饰,而且他们不能是private。因为,一定是抽象类的子类来去实现它。
abstract class Student//抽象类
{
abstract public void Study();//没有方法体的抽象方法
}
不允许去实例化一个抽象类,它就剩下可以作为基类把自己派生出去,或者声明变量,利用多态。用父类的变量实现子类的实例。
开闭原则
大意是指,不是为了修bug或添加新的功能,不要去修改类的内容。
下面例子中,很好的展现了开闭原则:利用创建一个抽象类,然后派生子类,达到不改动最初的基类里的代码,仍可以添加各种新的需要。同时凸现了抽象类作为基类的作用以及运用多态实现灵活调用方法而不用去修改基类。(这里我们就不用在Vehicle这个类里添加一些方法来达到引用下面新增类里需要的方法,而是利用多态,不改变基类里的代码,也可以实现功能)这样,我增加子类,就不需要改动基类里的代码,而是直接添加子类,然后创建子类的对象实例即可。(下面有个反例)
class Program
{
static void Main(string[] args)
{
Vehicle v = new