第二章 面向对象的几个基本原则 博客分类: J2EEJava设计模式设计Java基础
程序员文章站
2024-03-24 21:16:58
...
2.1 抽象类和接口
抽象类是可以继承一个抽象类
抽象类
public abstract class Animal { public abstract void sleeping(); public abstract void run(); }
具体类:
public class Bird extends Animal { @Override public void run() { System.out.println("鸟用翅膀飞"); } @Override public void sleeping() { System.out.println("鸟在树枝上睡觉"); } public static void main(String[] args) { Animal bird = new Bird(); bird.run(); bird.sleeping(); } }
public class Dog extends Animal { @Override public void run() { System.out.println("狗用脚跑"); } @Override public void sleeping() { System.out.println("狗白天睡觉"); } public static void main(String[] args) { Animal dog = new Dog(); dog.run(); dog.sleeping(); } }
抽象类的总结
- 抽象类应该拥有尽可能多的共同代码
- 抽象类应该拥有尽可能少的数据
什么时候用抽象
- 区分is-a(继承)和has-a
- 永远不会出现将子类转换为另一个类的子类
- 子类具有扩展超类得责任,而不是置换或注释超类的责任
- 只有在分类学角度上有意义时才继承,而不是继承工具类
什么是接口
一个Java接口是一些方法特征的集合,只有方法的特征,没有方法的实现,因此这些方法在不同的地方被实现时代表不同的行为。Java接口不涉及对象,只描述共有特征的行为,且没有方法的实现。
为什么使用接口
- 完成不同对象之间相互关系的体现,作为连接不同对象之间完成业务的纽带
- 接口保证了可插入性,关联的插入性和调用的可插入性
- 类型的转换
2.2 面向抽象
- 问题描述:求不同柱体的体积
- 不同柱体:圆柱体,矩形柱体,三角形柱体
- 公式:底面积*高
- 问题分析
柱体
圆柱体、矩形柱体、三角形柱体 - 体积
底面积
圆、矩形、三角形
设计
2.3 开闭原则
- 开闭原则:Open-Closed-Principle
对扩展开放:轻松的加自己的扩展
对修改关闭:加扩展不需要修改原来的代码结构
在不被修改的前提下进行扩展
易扩展、易维护
要做到开闭原则就必须进行合理的抽象,将可变的需求尽量都关闭在抽象部分类里,将可扩展的部分放在子类中来体现
2.4 多用组合少用继承原则
- 继承的缺点
子类继承父类的方法在编译期间就被确定了,所以在运行期间无法改变从父类继承的方法行为
子类与父类属于强耦合关系,一旦父类的方法改变,所有子类的方法都得改变
白盒复用,因为子类对父类的所有方法是可见的 - 组合复用的优点
黑盒复用,当前对象只拥有委托对象实例,具体实现细节都在委托对象类中
对象与所包含的对象属于弱耦合关系
可以再运行期间动态指定所包含的对象
2.5 高内聚低耦合原则
- 高内聚
类中的方法都是一组相关的行为,是所有子类的共有行为 - 低耦合
不要让一个类包含太多对其他类的应用,避免修改其他对象时以影响到了太多的关联对象