第六章 面向对象程序设计与开发(二)
面向对象程序设计实验(二)2024

面向对象程序设计实验(二)引言概述:本文档旨在介绍面向对象程序设计实验(二)的相关内容。
实验(二)主要涉及面向对象程序设计中的基本概念和实践技巧。
通过本次实验,学生可以进一步巩固对于面向对象程序设计的理解和应用能力。
正文内容:1. 类与对象1.1 定义类和对象的基本概念1.2 区分类和对象的特点和属性1.3 类的成员变量与成员函数的关系1.4 类的继承与派生的用法和作用1.5 类型转换和类型检查的重要性和技巧2. 封装和继承2.1 封装的原则和目的2.2 不同类型的访问控制修饰符的应用与实践2.3 继承的基本概念和实现方法2.4 多态性的应用与实例解析2.5 接口与抽象类的定义和使用3. 异常处理3.1 异常处理的基本原则和作用3.2 异常的分类与处理方式3.3 异常处理的语法和使用方法3.4 异常处理的常见问题和解决策略3.5 异常处理的最佳实践和注意事项4. 面向对象设计的思想和原则4.1 面向对象设计的核心概念和思维方式4.2 SOLID设计原则的介绍和实践应用4.3 设计模式的分类和使用场景4.4 常用设计模式的详细介绍和实例应用4.5 面向对象设计的常见问题和解决策略5. 实践与案例分析5.1 针对实验要求的代码设计与实现5.2 对实验结果的分析和评价5.3 面向对象程序设计思想在实验中的运用和效果5.4 实际项目中的面向对象设计相关问题的解决方法5.5 实验总结和下一步改进计划总结:通过本次面向对象程序设计实验(二),学生能够更好地理解和应用面向对象的基本概念和设计原则,并能够灵活运用相关技巧进行程序开发和问题解决。
实验的实践部分更加加深了对面向对象程序设计的理解和实际应用能力的培养。
这些知识和技能对于学生未来的软件开发和项目管理工作具有重要意义。
《面向对象程序设计》辅导四

《面向对象程序设计》辅导四第六章 简单程序设计学习要点:一个真正的C++程序是由多个文件组成的。
在开发的过程中,会形成多个程序文件和多个头文件。
多文件结构可以提高程序的可读性、提高程序的开发效率。
学习要求:理解多文件结构,能在程序设计中合理利用多文件来进行模块划分。
能正确使用外部存储类型和静态存储类型。
理解编译预处理的概念,能在程序中合理使用#include 预处理指令,看懂#define 、#if 、#ifndef 、#else 、#undef 、#elif 等指令。
理解标识符的三种生命期:静态、局部和动态生命期,能指出给定程序中标识符的生命期。
能综合运用头文件、外部变量、静态变量来组织多文件结构的程序。
学习方法引导:从多文件结构入手,学习如何编制C++程序,理解C++程序的整体结构。
掌握几个重要概念。
结合实例来理解一个由多文件组成的程序的开发过程。
学习内容:我们知道,用VC 设计软件时首先要建立一个工程文件,在这个工程文件中指定了该工程用到的所有文件,这其中包含了所有C++程序文件。
C++程序是由许多函数组成的,函数是由语句组成的。
如下图所示。
在设计程序时,需要定义大量标识符,对标识符的操作是程序设计的关键。
标识符一经定义就有了其作用范围,它在某些范围内是可见的,并不是定义之后都能使用。
特别是在多文件结构中,标识符的作用范围除了块级、函数级、还包括文件级和程序级;全局变量不再只是文件级变量,而又分为外部变量和静态全局变量;函数则又分为外部函数和静态函数等。
因此在设计多文件结构的C++程序时,有着比单文件结构更复杂的特性。
一、多文件结构在设计大型系统时,一般都由多个程序设计人员合作完成,每个程序员完成一部分程序,并以文件的形式存储起来,这样一个工程就包含多个程序文件。
C++支持多文件结构,即允许一个工程文件中建立多个程序文件。
多文件结构与单文件有比较类库自定义包含文件 。
包含main 函数的主文件:main 函数是程序的入口,每个工程只有一个main 函数。
软件工程第六章面向对象方法概述

系
人科
车辆
非机动车 机动车
哺乳动物
翼手目
食肉目
猴科
犬科
自行车 人力车 客车 卡车 拖拉机
鲸目
猫科
人
猩猩
狗 狼 狐猫 虎 豹
继承性(续)
▪ 不要滥用继承
➢ 如果类A和类B毫不相关,不可以为了使B的功 能更多些而让B继承A的功能。 人想拥有狗鼻 子的灵敏问题。
➢ 若在逻辑上A是B的“一部分”(a part of), 则不允许B继承A的功能,而是要用A和其它东 西组合出B。 头与眼睛、鼻子、耳朵、嘴巴的 关系。
其中,ID MS DS MI是对象受理的消息名集合(即对外接口)
➢ 对象(Object)是类(Class)的一个实例(Instance)。
面向对象的基本概念(续)
▪ 类的定义
➢ 对具有相同数据和相同操作的一组相似对象的定 义。
➢ 类是对象的程序描述,对象是该程序运行时所创 建的实例。
➢ 对象比作房子,那么类就是房子的设计图纸 。 ➢ 对象比作一个个活人,则人类则是对人这类动物
▪ 对象A向对象B发送消息f就是对象A调用对象B的 方法f
面向对象的特征
▪ 以数据为中心,抑或以行为为中心
➢ 分别用上述两种方式来描述人
▪ 封装性 ▪ 继承性 ▪ 多态性
封装性
▪ 封装性是把对象的属性和方法结合成一个独立的 单元,并尽可能荫蔽对象的内部细节。
➢ Public,private,protected ➢ 避免访问内部数据 ➢ 尽量通过方法访问
归纳关系(续)
组合关系
▪ 组合关系就是“整 体—部分”关系,它 反映了对象之间的构 成关系。组合关系也 称为聚集关系。
▪ 组合关系具有的最重 要的性质是传递性。 也就是说,如果A是B 的一部分,B是C的一 部分,则A也是C的一 部分
面向对象程序设计实例

在面向对象程序设计中,程序设计主要是描述类, 在面向对象程序设计中,程序设计主要是描述类, 因此,面向对象程序设计可归结为类的设计。 因此,面向对象程序设计可归结为类的设计。 面向对象程序设计实际上包括: 面向对象程序设计实际上包括: (1)面向对象应用程序设计: 无须了解类的实现细节。 面向对象应用程序设计: 面向对象应用程序设计 无须了解类的实现细节。 (2)类库设计:为面向对象程序设计提供“素材”。 类库设计: 类库设计 为面向对象程序设计提供“素材” 优点:程序结构更加规范化,程序可读性好、 优点:程序结构更加规范化,程序可读性好、可维 护性好。 护性好。
用环形链表来表示小孩围成圈, 用环形链表来表示小孩围成圈 , 每个结点代 表一个小孩。 表一个小孩。 步骤: 步骤: (1)列出 列出Josephus问题的名词表: 问题的名词表: 列出 问题的名词表 小孩;链表;小孩数;开始位置; 小孩;链表;小孩数;开始位置; 数数间隔;小孩离开;输出胜利者…… 数数间隔;小孩离开;输出胜利者
Josephus类 类 { 界面(函数成员) 界面(函数成员) 构造函数 求获胜者 内部数据成员 小孩数 开始位置 数数间隔 } //主函数 主函数 创建一个Josephus类对象 创建一个 类对象 调用getWinner求获胜者 调用 求获胜者 BoyRing(环链表)类 (环链表) { 界面(函数成员) 界面(函数成员) 构造函数 析构函数 根据数数间隔数小孩 小孩离队(从环链中去掉当前小孩) 小孩离队(从环链中去掉当前小孩) 返回当前小孩编号 输出所有小孩 内部数据成员 小孩结构数组指针 小孩哨兵指针 当前小孩指针 }
面向对象程序设计(二)
吕俊白
第十章
面向对象程序设计实例
所谓面向对象的程序设计方法就是运用面向 所谓面向对象的程序设计方法就是运用面向 面向对象的程序设计方法 对象的观点来描述现实问题, 对象的观点来描述现实问题,然后用计算 机语言来描述并处理该问题。 机语言来描述并处理该问题。 这种描述和处理是通过类与对象实现的, 这种描述和处理是通过类与对象实现的 , 是 对现实问题的高度概括、分类和抽象。 对现实问题的高度概括、分类和抽象。 运用面向对象的观点来描述现实问题, 运用面向对象的观点来描述现实问题 , 首先 要对现实世界中的对象进行分类, 要对现实世界中的对象进行分类 , 然后抽 象出一类对象的共性并加以描述。 象出一类对象的共性并加以描述。
面向对象程序设计C#课程教案

《程序设计与算法(C#)二》课程教案一、课程说明1、课程代码: 0404832、总学时数: 64 ,其中理论环节学时数: 32 ,实验实践环节学时数: 363、学分: 6分4、适用专业:计算机应用技术5、本课程的性质、地位和作用本课程是计算机应用技术的一门重要的编程类专业课。
C#语言是针对网络技术应用而开发的语言,课程的主要教学内容以应用为主,以语法介绍为辅,主要包括C#语言基本语法、面向对象编程方法,C#开发Windows应用程序,C#开发Web应用程序等。
本课程的先修课是计算机应用基础或C语言,后续课程是基于C#的Web应用程序设计。
本课程是软件工程、信息系统开发、开发工具等课程的前驱课程。
《程序设计与算法(C#)》采用CAI课件,在多媒体教室讲授。
使用多媒体技术可以提高授课效率,可以现场运行、修改例子程序,实现直观教学,提高授课效果。
本课程以从实际应用出发,集应用与原理于一体,两部分内容互相联系,又各有侧重,力求做到理论联系实际,用理论来指导实际应用。
二、教学基本要求1、本课程的目的、任务课程的教学目的是培养学生使用NET平台开发桌面及网络应用程序的能力。
教学任务是让学生掌握C#语言的基本知识与技术,理解并树立面向对象的程序设计思想,培养运用Visual C#开发工具进行编程的能力。
2、本课程的教学要求课程的要求是培养学生面向对象编程的思想和能力及素质,为以后学习其它面向对象的编程语言打下坚实的基础。
本课程是一个实践性非常强的课程,要求学生要注重实践,在掌握C#语言的基本语法后,重点应放在提高编程能力的训练上。
主要教学方法与手段采用面课堂讲授与实习相结合;多媒体教学与传统教学相结合。
三、学时分配四、大纲具体内容(一)课程教案内容(根据实际安排,本课程《C#技术基础》一书分两学期上。
)第四章 C#面向对象程序设计基础(类的继承)【本节教学目的、要求】:让学生理解面向对象程序设计的概念和基本特征,学生能够熟练运用类定义、对象创建和使用对象的方法,类的成员及作用域,能设计多个具有层次结构的类,示范类的继承。
面向对象课后题答案

D. 使用内联函数,可以减小程序代码大小,但使程序执行的速度减慢
【结果分析】
内联函数主要是解决程序的运行效率问题。在程序编译时,编译系统将程序中出现内联函数调用的地方用函数体进行替换,进而减少了程序运行的时间,但会增加程序代码的大小。它是以空间换取时间,因此内联函数适用于功能不太复杂,但要求被频繁调用的函数。
B. 对象实际是功能相对独立的一段程序
C. 各个对象间的数据可以共享是对象的一大优点
D. 在面向对象的程序中,对象之间只能通过消息相互通信
【结果分析】
对象是计算机内存中的一块区域。在对象中,不但存有数据,而且存有代码,使得每个对象在功能上相互之间保持相对独立。对象之间存在各种联系,但它们之间只能通过消息进行通信。
C. C++对C语言进行了一些改进 D. C++和C语言都是面向对象的
【结果分析】
C语言是面向过程的。C++语言是一种经过改进的更为优化的C语言,是一种混合型语言,既面向过程也面向对象。
(6) 面向对象的程序设计将数据结构与( A )放在一起,作为一个相互依存、不可分割的整体来处理。
A. 算法 B. 信息 C. 数据隐藏 D. 数据抽象
四、 判断题
(1) 在高级程序设计语言中,一般用类来实现对象,类是具有相同属性和行为的一组对象的集合,它是创建对象的模板。( √ )
(2) C++语言只支持面向对象技术的抽象性、封装性、继承性等特性,而不支持多态性。( × )
【结果分析】
C++语言不仅支持面向对象技术的抽象性、封装性、继承性等特性,而且支持多态性。
面向对象与面向过程程序设计的思考与解释
面向对象与面向过程程序设计的思考与解释(蒋世贤电子商务071 山东工商学院)面向过程程序设计与面向对象程序设计都是一种设计程序的方法,由于其对对象操作的不同而产生了不同的设计思想。
本文在笔者学习了《面向对象程序设计——C++语言描述》这门课后,由笔者整理总结面向对象程序设计与面向过程程序设计的区别与联系后,写下此文,主要阐明笔者对两种程序设计思想的思考与理解。
一、面向对象与面向过程程序设计简介面向对象程序设计中的以“对象”作为编程实体最早可以追溯到1960年的Simula 67语言。
而面向过程程序设计则诞生的比面向对象程序设计要早的多。
两者都有着各自的核心思想结构。
面向过程设计的思想发展较早,当今的C语言就是面向过程的一个典型,而面向对象则以其独特的程序设计视角被当今人广泛接受,C++就是其典型的代表。
(一)面向过程程序设计面向过程的结构化程序设计方法就是采用面向过程的方法来设计结构化程序。
结构化程序通常包含一个主过程和若干个子过程,其中每个子过程都描述了某一个小问题的解决方法再由主过程自顶向下调用各子过程,来逐步解决整个问题。
整个执行过程是从主过程开始,再在主过程的结束语句处结束。
因此,结构化程序设计方法是一种数学思维或计算机思维方法,和人们认识世界时所习惯使用的方法不同。
面向过程程序设计通常采用自顶向下设计方法进行设计。
在这种设计方法中,程序的每一个步骤直接的函数依赖关系是非常紧密的。
要解决一个问题,就要通过一个个所设计好的函数步骤进行,每一个环节都是环环相扣的,都不能出错。
一旦一个环节出错,将影响至整个问题的解决结果。
面向过程设计语言以C语言、Pascal语言为主。
而关于相关代码的举例说明,我们将在下面进行对比介绍。
(二)面向对象程序设计面向对象程序设计(英语:Object-oriented programming,缩写:OOP),指一种程序设计范型,同时也是一种程序开发的方法论。
它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。
第六章面向对象的软件工程
30
1. 确定对象
运用前面介绍的方法确定系统中所有的对象及对象的属性和操作。 运用前面介绍的方法确定系统中所有的对象及对象的属性和操作。如家 庭安全系统: 庭安全系统:
继承意味着可以利用已有的定义、设计和实现, 继承意味着可以利用已有的定义、设计和实现,简 化了相似类的重复定义。实现了软件的可重用性。 化了相似类的重复定义。实现了软件的可重用性。
14
从结构上讲类是分层的,一个类的上层可以有超 从结构上讲类是分层的,一个类的上层可以有超 父类),下层可以有子类 继承具有传递性。 ),下层可以有子类, 类(父类),下层可以有子类,继承具有传递性。
Y1
Y2
Yn
Y
多重继承: 多重继承:
X
单重继承: 单重继承:
X
15
1 面向对象软件的开发过程
采用面向对象开发方法构造的软件具有以下特点: 采用面向对象开发方法构造的软件具有以下特点: 面向对象技术构造的模型与客观世界一致; 面向对象技术构造的模型与客观世界一致; 适应变化的需要,修改局限在模块中; 适应变化的需要,修改局限在模块中; 具有可复用性
26
Caod & Yourdon的设计模型 的设计模型
窗口 人机交互 界 面 问题域
系统交互 界 面 (任务 管理) 管理)
其它系统
设 备 数据管理 报告 处理器
数据库
27
应用框架结构 根据应用领域系统的特有结构划分子系统(模板、 根据应用领域系统的特有结构划分子系统(模板、 主题、抽象类的集合) 主题、抽象类的集合)。 然后设计细化每个子系统的对象模型、动态模型 然后设计细化每个子系统的对象模型、 和功能模型。 和功能模型。 如专家系统的典型结构: 如专家系统的典型结构:
软件工程—第6章 面向对象设计—OMT介绍
类库中已有 车辆 OTS 车牌 车牌确认
设计结果: 车辆 OTS 车牌 车牌确认
车辆 车牌确认 车牌 颜色 式样 生产日期 产地 车牌确认
2.用户界面部分(HIC)的设计 • 通常在OOA阶段给出了所需的属性和操作,在设计阶 段必须根据需求把交互的细节加入到用户界面的设计 中,包括有效的人机交互所必需的实际显示和输入。
Coad与Yourdon的方法
主题层 类与对象层 结构层 属性层 服务层
人机 交互
问题 域
数据 管理
任务 管理
问题论域部分包括与所面对的应用问题直接有关的所有 类和对象。 在其它的三个部分中,识别和定义新的类和对象。
1.问题域部分(PDC)的设计 – OOA阶段得到的有关应用的概念模型描述了所要解 决的问题 。在OOD阶段,主要是对OOA产生模型 中的某些类与对象、结构、属性、操作进行组合与 分解,或者增加必要的类、属性和联系。
Coad与Yourdon的方法
1)数据管理方法 – 数据管理方法主要有三种 • 文件管理 • 关系数据库管理 • 面向对象的数据库管理 2)数据管理部分的设计 –数据存储管理部分的设计包括数据存放方法的设计 和相应操作的设计
OMT(object modeling technique)
– OMT是美国通用电气公司在总结其内部多年来采用 OO技术开发实践的基础上提出的一套系统开发方 法学。 – OMT最早是由Loomis,Shan和Rumbaugh在1987 年提出的,曾扩展应用于关系DB设计。 – J.Rumbaugh在1991年正式把OMT应用于OO的分 析和设计。 –它以面向对象思想为基础,通过构造一组相关模型 (对象模型、动态模型和功能模型)来获得关于问 题的全面认识(即问题领域模型),是在实体关系 模型上扩展了类、继承和行为而得到的。
面向对象程序设计基础
对象.属性名或对象.方法名,引用中的“对象” 描述,一般使用如下格式:父对象类名!子对象名。
1.2 对象和类的概念
类是对一类相似对象的性质描述,这些对象具有相同的性质; 相同种类的属性以及方法。类是对象的抽象,而对象是类的具体实例。
在Access 2003中,除表、查询、窗体、报表、页、宏和模块等 7种对象外,还可以在VBA中使用一些范围更广泛的对象,例如,“记 录集”对象、DoCmd对象等。
Access数据库技术与应用
面向对象程序设计基础
1.1 面向对象的程序设计概念 面向对象技术提供了一个具有全新概念的程序
开发模式,它将面向对象分析(OOA,Object-Oriented Analysis)、面向对象设计(OOD,Object-Oriented Design)和面向对象程序设计(OOP,Object-Oriented Programming)集成在一起,其核心概念是“面向对 象”。
Байду номын сангаас
Access数据库技术与应用
2. DoCmd对象 DoCmd是Access 2003数据库的一个重要对象,它的主要功能是 通过调用Access 内置的方法,在VBA 中实现某些特定的操作。 例如:利用DoCmd对象的OpenForm方法打开“学生信息录入” 窗体,使用的语句格式为: DoCmd.OpenForm "学生信息录入"
所谓面向对象(Object-Oriented),可以这样定义: 面向对象=对象+类+属性的继承+对象之间的通 信。
1.2 对象和类的概念
1. 对象和类 客观世界的任何实体都可以被看作是对象。每 个对象都具有描述其特征的属性及附属于它的行为, 属性用来表示对象的状态,方法用来描述对象的行为。 属性和方法是与对象紧密联系的,“对象”既可以是 一个单一对象,也可以是对象的集合。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
生活中的接口
电脑主板上的PCI插槽的规范就类似于Java接口
声卡
网卡
主板
显卡
每种卡的内部结构都不相同,可以把声卡、 网卡、显卡都插在PCI插槽上,而不用担心哪 个插槽是专门插哪个卡的
什么是Java接口
一个Java接口是一些方法特征的集合,但没有方法的实现
public interface PCI { public void start(); public void stop(); } 这是Java接口,相当于主 板上的PCI插槽的规范
public class Teacher { //输出教员的详细信息 public String detail() { return “本人是加中教员"; } }
接口实例
可以通过多态性解决这个问题吗?
回顾多态的含义: 实现同一个接口,使用不同的实例而执行不同操作
教员 detail方法 (负责输出详细信息)
Du du... Send...
接口特征
接口可以多重实现 接口中声明的属性默认为 public static final 的;也 只能是 public static final 的 接口中只能定义抽象方法,而且这些方法默认为 public的、也只能是public的 接口可以继承其它的接口,并添加新的属性和抽象方 法 接口只能用来实现,不能创建实例对象 多个无关的类可以实现同一个接口 一个类可以实现多个无关的接口 与继承关系类似,接口与实现类之间存在多态性
局部内部类
指定义在方法内部的内部类 局部内部类的作用域仅限于方法内部,而且局部内部类不能定义 访问权限
匿名类
匿名类是一种特殊的内部类,这种类没有名字。 如: class A{ public void method(){ System.out.println(“A.method”); } public static void main(String[] args){ new A().method(); A a = new A(){ void method(){ System.out.println(“Inner.method”); } } }
1
2
学校 详细信息
2
学校
1
显然,本系统符合使用多态性的条件
教员 详细信息
接口实例
在这个系统中,存在继承关系吗?
教员、学校属于两种不同的类型,无法通过“is-a”找到一个合适 的父类
教员、学校都存在一个共同的方法特征:detail,它们对 detail方法有各自不同的实现——这完全符合Java接口的 定义
public final String say(){}//子类不能重写改方法
使用final修饰符声明的类不能被继承
abstract 修饰符
由abstract修饰的方法叫抽象方法;由abstract修饰的类叫抽象类
抽象方法必须声明在抽象类中
抽象方法语法:
abstract type method_name(parameter_list);
声卡、网卡都遵守了PCI插槽的规范,但行为完全不同
什么是Java接口
可以使用Java接口定义规范 运行时,根据实际创建的对象类型调用相应的方法实现
public class Assembler { public static void main(String[] args) { PCI nc = new NetworkCard(); 1 PCI sc = new SoundCard(); nc.start(); 控制台输出 2 sc.start(); } }
静态内部类
静态内部类是成员内部类的一种,用static修饰 静态内部类的特点: 1.静态内部类的实例不会自动拥有外部类的实例引用,在创建内 部类的实例时,不必创建外部类的实例。
class A{
public static class B{
int v;
}
} 创建B的实例,A.B b = new A.B(); 2.静态内部类可以直接访问外部类的静态成员,如果访问外部类的实例成员 就必须通过外部类的实例去访问。 3.在静态内部类中可以定义静态属性和实例属性 4.可以通过完整的类名直接访问静态内部类的静态属性
class Square extends Shape { /** 构造方法. *@param num 传递至构造方法的参数 *@param num1 传递至构造方法的参数 */ Square(final double num, final double num1) { super(num, num1); } /** * 计算正方形的面积. * @return double */ double area() { System.out.println(“正方形的面积为:"); return length * width; } }
Java接口中定义的方法在不同的地方被实现,可以具有 完全不同的行为
class SoundCard implements PCI { public void start() { System.out.println("Du du..."); } public void stop() { System.out.println("Sound stop!"); } } class NetworkCard implements PCI { public void start() { System.out.println("Send..."); } public void stop() { System.out.println("Network stop!"); } }
abstract 修饰符
abstract
抽象类不能被 实例化
构造方法 和 static 方法不能是抽象的
父类的抽象方法往 往在子类中实现
如果一个类中存在一个或多个抽象方法,则该类必须是一个抽象类 一个抽象类中可以存在一个或多个抽象方法,也可以不存在抽象方法 一个类继承了一个抽象类,则该类必须实现(重写)父类中的所有的抽 象方法,否则该类也必须声明为抽象类 抽象类主要用于子类继承,以规范子类的行为
第六章
面向对象程序设计与开发(二)
主讲:齐岩
本章目标
掌握方法修饰符 掌握抽象类 掌握接口 理解多态
方法修饰符
方法修饰符
static
final
abstract
static 修饰符
static修饰符修饰的方法叫静态方法
目的
使该方法独立于类的实例,使用类去访问,而不是类实例,所 以也叫类方法
规则
可以调用其他静态方法 调用静态方法的语法为:
打印
接口实例
以下这个解决方案中存在着什么问题?
public class School { private Printer printer = new Printer(); //输出中心的详细信息 public String detail() { return “这里是西安加中学校"; } //使用打印机打印教员信息 public class Printer { public void print(Teacher t){ public void print(String content) { printer.print(t.detail()); System.out.println("开始打印:"); } System.out.println(content); //使用打印机打印学校信息 } public void print(School s){ } printer.print(s.detail()); } } 每增加一种新类型,都需要增加相应的print(新增类型名 obj)方法 ——程序的可扩展性及可维护性极差 ——这不符合系统的要求
内部类按作用域划分:
成员内部类
实例内部类
静态内部类
内部类
局部内部类
实例内部类
定义在类中,并且没有在其他任何方法内部定义的类,称为成员内部类,如 果一个成员内部类没有static修饰则该成员内部类是一个实例内部类 实例内部类的特点:
1.创建实例内部类实例时,外部类的实例必须存在 Outer.InnerTool tool = new Outer().new InnerTool();//创建内部类InnerTool对 象 2.实例内部类的实例自动拥有外部类的实例的引用。在内部类中可以直接访问外部类 的所有成员(成员变量和成员方法) 3.外部类实例与内部类实例之间是一对多的关系,一个内部类实例只会引用一个外部 类实例,而一个外部类实例对应零个或多个内部类实例。在外部类中不能直接访 问内部类的成员,必须通过内部类的实例去访问。 4.在实例内部类中不能定义静态成员,而只能定义实例成员。 5.如果实例内部类B与外部类A包含同名属性,那么在B中,this.属性名表示类B的成 员,A.this.属性表示类A的属性。
小结
定义一个超人类
超人具有人的特性 超人具有更多非人类的特性(上天、下地等)
内部类
在一个类内部定义的类称为内部类
外部类
内部类
在外部类中可以直接使用内部类,如 private InnerTool tools = new InnerTool();
内部类
内部类的完整类名:外部类.内部类 内部类的访问权限可以是:public、private、protected、默认的
声明抽象类语法: abstract class{…… } 使用:父类中的某些抽象不包含任何逻辑,并需要在子类中重写,子 类提供这种抽象方法的实现细节
abstract 修饰符
抽象方法不具有任何实现代码 abstract class Shape { ........... protected double length; protected double width; ........... ........... abstract double area(); }