标签:刘铁猛 SOLID 子类 接口 C# 抽象 抽象类 方法 实现
接口与抽象类是所有高阶面向对象的起点,是学习设计模式的前置条件
必须有实践基础之后,才能真正掌握算法、设计模式
设计模式的基础
solid五大设计原则(待续)
1.单一职责原则
single responsibility principle
2.开放-关闭原则
Open-close principle,简称为
开闭原则
“封装确定的,开放不确定的,不确定的推迟到合适的子类中去实现”
3.替换原则
4.接口隔离原则
详见学习笔记20
5.依赖反转原则
(Dependency inversion principle,简称DIP)
使得
高层次的模块(功能调用者)不依赖于
低层次的模块(功能提供者)的实现细节,
依赖关系被颠倒(反转),从而使得
低层次模块依赖于高层次模块的需求抽象
从调用者依赖提供者的功能,转换为提供者依赖调用者给出的需求
抽象类abstract
概念定义
抽象类指“
成员没有被完全实现的类”
如下这样,在
声明类时abstract修饰符
包含用abstract修饰的成员方法没有方法体(称作未被实现)
这样的抽象方法不能是private的,因为实现这个方法的一定是
抽象类的子类
一旦被abstract修饰,就不能有任何的
逻辑实现,大括号都没有
抽象方法在C++中也称作“
纯虚函数”
抽象类不能被实例化
抽象类两大功能
1.作为基类去派生出子类
2.声明变量去装子类实例
实例程序讲解
声明一个小汽车类、卡车类,发现二者的Stop方法完全一致
违反了“
不能复制粘贴原则”,出现了未能复用的完全相同代码
于是为他们建立一个基类,使用虚方法重写、多态来复用代码
但发现一个问题,父类的虚方法的方法体,似乎永远不会被用到
干脆不写虚方法的方法体,让他变成“
纯虚方法”,在C#中就是抽象方法
但抽象方法所在的类也必须加修饰符变成抽象类
这样添加新子类时不用动父类代码,符合
开闭原则
在继承自抽象父类的子类声明时,会划红线
提示是否在此继承层级进行
抽象方法的实现
若不实现,则此子类也必须写为抽象类
抽象方法实现时
必须被重写(写上override修饰符)
抽象类就是专为作基类而生的
有没有一种可能,一个类中所有成员都是抽象成员
“非常抽象的抽象类”、“纯抽象类”
fill、stop方法在vechicle一级实现,run方法在再下一级实现
这种“纯抽象类”在C#中就是 接口interface
接口interface
使用关键字
interface将原本的类标识为接口
因为纯抽象类的成员一定是
公开的、抽象的,所以之前写的abstract、public修饰符可以去掉
在实现抽象方法时,重写修饰符override也应该去掉
未实现方法的向下传递
需要在此层级类中写上
完整抽象方法声明,将该方法的实现在继承链上往下推
因为是用抽象方法向下传递的,到再下一层时此方法来自一个抽象类,而非完整的接口
所以
在接口的下下层要实现该方法时需要写上重写override修饰符
接口命名规范
接口命名时,在单词前写上字母"I"表接口interface
小结
抽象类、接口是软件工程实践的产物,是为了提高工程质量总结出的
抽象类是
未完全实现成员 的类
接口(纯抽象类)是
完全未实现成员 的类
抽象类是为复用、作为基类而生
接口的为
解耦而生(待续)
标签:刘铁猛,
SOLID,
子类,
接口,
C#,
抽象,
抽象类,
方法,
实现
From: https://www.cnblogs.com/jk-2048/p/18030569