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 高内聚低耦合原则
- 高内聚
类中的方法都是一组相关的行为,是所有子类的共有行为 - 低耦合
不要让一个类包含太多对其他类的应用,避免修改其他对象时以影响到了太多的关联对象
相关推荐
本资源集合是"李爱华"和"程磊"编写的《面向对象程序设计》一书第二章的C++语言基础案例源程序,涵盖了C++的基本要素,旨在帮助学习者通过实践理解C++的基础知识。 在第二章中,主要讨论了C++语言的基础,包括以下几...
《设计模式:可复用面向对象软件的基础》是引导读者...第二章 实例研究:设计一个文档编辑器 第三章 创建型模式 第四章 结构型模式 第五章 行为模式 第六章 结论 附录A 词汇表 附录B 图示符号指南 附录C 基本类 参考文献
### 面向对象的分析与设计_第二章_需求概述 #### 知识点概览 本章节主要探讨了面向对象分析与设计中的“需求概述”部分,它旨在为软件项目的开发提供清晰的需求框架。内容包括:简要介绍、核心概念、用例模型、...
函数重载是指在同一个作用域内可以声明几个功能类似的同名函数,但这些函数的参数类型、个数或顺序至少有一个不同。 ### 文件操作 C++通过`<fstream>`库提供的`ifstream`和`ofstream`类来进行文件的读取和写入操作...
第二章主要讨论了以下几个关键知识点: 1. **类(Class)**: 类是面向对象编程的核心,它是创建对象的蓝图或模板。在C++ 中,类用于定义一组数据(属性或成员变量)和操作这些数据的方法(成员函数)。例如,一个汽车...
本章节通过几个典型的Java示例来帮助初学者理解面向对象的基本概念。 #### EX1: 输出成员变量的值 在第一个示例中,我们创建了一个`Student`类,它包含了三个成员变量:`sNumber`(学号),`sName`(姓名),以及`...
本教程的第11章主要讲解了以下几个方面: 1. **抽象编程**:抽象编程分为行为抽象和数据抽象。行为抽象是将一系列行为归结为单一行为的过程,比如将吃饭的动作抽象为一个行为。数据抽象则是将具有共同属性的事物...
在深入.NET的学习过程中,第二章通常会涵盖.NET框架的基础知识,包括但不限于类库、托管代码、垃圾回收机制、类型系统以及面向对象编程的基本概念。上机实践是学习这些概念的关键,因为它能帮助我们理解理论知识如何...
在第二章,我们通常会接触到以下几个关键知识点: 1. **基本语法**:包括变量声明、数据类型(如int、float、char等)、常量定义、运算符(如算术、比较、逻辑运算符)以及流程控制语句(如if条件语句、switch语句...
第一部分主要介绍面向对象分析与设计的基本概念和方法,涵盖以下几个方面: 1. **绪论**:这部分将介绍面向对象编程的基本思想,包括类、对象、继承、封装和多态等核心概念。 2. **面向对象的需求建模**:讲解如何...
类的定义包含以下几个关键部分: 1. 数据成员(成员变量):存储对象的状态信息。 2. 成员函数(方法):定义对象可以执行的操作。 3. 访问修饰符:控制类成员对外的可见性和访问权限。C++中主要有`private`(私有...
首先,本章介绍了高级数据库应用的几个领域,包括计算机辅助设计(CAD)、计算机辅助软件工程(CASE)、多媒体系统、地理信息系统(GIS)以及交互式和动态的Web站点。这些应用往往需要处理复杂的数据类型,如二进制...
- **基本数据类型**:第二章讲解了程序设计中最常见的几种数据类型,如整型、浮点型等。 - **控制结构**:第三章探讨了程序中的基本流程控制结构,如条件判断、循环等。 - **子程序(方法)**:第四章解释了如何...
【ACCP5.0 S1 Java第二章作业答案】是一个针对学习ACCP5.0(Accelerated Certified Computer Professional 5.0)课程第一学期(S1)Java编程的学生的资源集合,主要涵盖了Java语言的基础知识及其应用。这个压缩包...
在深入探讨C++_钱能的第二章内容之前,首先要明白C++是一种强大的、通用的编程语言,它以其面向对象的特性、高效性能以及广泛的应用范围而闻名。"钱能"可能是对学习资源或者教程的一种独特命名方式,暗示着通过学习...
《UML面向对象设计与分析基础教程课件第二章》对用例图进行了深入的讲解,帮助读者掌握这一关键工具的理论知识和实际应用。 用例图是基于UML的一种图表,它主要从用户角度出发,描述了系统的功能以及用户如何与这些...
第二部分 对象 第2章 PHP与对象 第3章 对象基础 第4章 高级特性 第5章 对象工具 第6章 对象与设计 第三部分 模式 第7章 什么是设计模式?为何使用它们 第8章 模式原则 第 9...
在C#的学习过程中,第二章通常会涉及以下几个关键知识点: 1. **基础语法**:这是C#学习的起点,包括变量的声明与赋值、数据类型(如整型、浮点型、字符型、布尔型等)、运算符(算术、比较、逻辑、赋值等)以及...