03面向对象(访问控制(封装)-继承(重写)-多态)
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
多态:灵活、抽象、行为共享
面向对象的三大特性 封装 继承 多态 多态性是指允许不同类的对象对同一消息作出响 应。多态性包括参数化多态性和包含多态性。 多态性语言具有灵活、抽象、行为共享、代码 共享的优势,很好的解决了应用程序函数同名 问题。
TestInstanceof.java
多态-向上转型
向上造型
在继承中使用 特性: 1,方法名相同 2,参数列表同 3,不同的类中 4,方法体不同
private方法也不能覆盖。 子类方法的访问级别不能低于父类相应方法的访问级别 Oreriding
练习:类/对象,继承,重写
编写一个Java 程序,它具有名为Bike的类,该类具有wheels、 seat、speedometer、indicator、frontBreak、backBreak和 presentGear属性。它还具有名为increaseGear的方法(从1到4 更改齿轮)、名为decreaseGear的方法(从4到1更改齿轮)。 Bike类还具有名为indicateTurn()的方法,该方法将相应地更改 变量指示器的值。名为RacingBike的类是Bike的子类。它重写 increaseGear方法以从1到5更改齿轮,以及decreaseGear方法以 从5到1更改齿轮。Driver(另一个类)依次驱动Bike和RacingBike。
继承时的构造器
构造方法调用顺序
先父在子
Cartoon.java
要显示调用父类的相同构造 否则调用默认的 使用super关键字调用父类构造方法,要放到构造方法的第一句
Chess.java
super的用法
用来解决如何直接访问或初始化父类成员 两种用法: 1.访问父类构造方法(必须在第一句) 2.访问被子类覆盖的 父类的成员
This和super区别 DemoSuper.java
继承学后,研究 访问控制符protected的用法
Protected: 在本类,同一个包的其他类,不同包的子类可以 访问
Perent.java Child.java
练习:继承
设计一个学生类Student,其数据成员有 name(姓名)、age(年龄)和degree(学位)。由 Student类派生出本科生类Undergraduate和研 究生类Graduate,本科生类Undergraduate增 加成员specialty(专业),研究生类增加成员 direction(研究方向)。每个类都有show()方法, 用于输出数据成员信息
向上转型:由于造型的方向是从衍生类到基础类,箭头朝上,所以通常把它 叫作“上溯造型”,即Upcasting。上溯造型肯定是安全的,因为我们是从 一 个更特殊的类型到一个更常规的类型
为什么要向上造型
? 使程序更加灵活/多态参数
music3 music4 music5
多态
特性: 1.子类以父类的身份出现 2.子类调用父类的方法,子类以自身的方法体实现 (重写的方法) 3.子类以父类的身份出现时,其自身的方法不可用.
创建独一无二的包名
域名的倒写 生僻的包名
命令: Javac -d .\ java 包名.类名
Pac.java TestPac.java
xxx.java
访问控制符
public:接口访问 private:不能接触!(私有) Protected(包外继承)引入了一种名为“继承”的 概念 默认 friendly
shopes.java
多态-向下转型
向上转型(upcasting)为什么要向上转型? 动态绑定 向下转型 此时只能调用base class中被覆盖的方法 只有本来就起源与(来源类型)class对象时才可以正确向下转型
ExplicitStatic_1.java
练习 多态应用实例——计算雇员工资
让我们按照这个图示来演示 多态 的应用。应用实例中仅包括 了最 基本的数据和方法用来解释 多态的 实际应用中,添加其他数据 和方法 难。
方法重写
在Java中,子类可继承父类中的方法,而不需 要重新编写相同的方法。但有时子类并不想原 封不动地继承父类的方法,而是想作一定的修 改,这就需要采用方法的重写。方法重写又称 方法覆盖。
如需父类中原有的方法,可使用super关键字, 该关键字引用了当前类的父类TestEmp来自重写overrider
上节课内容提问
内容提问
面向对象的三大特征
封装性
包含数据和操作 信息隐藏
继承性
传递性 代码重用/可扩充性
多态性
静态:方法重载overload 动态:方法重写override,运行时根据对象的实 际类型来决定
封装:隐藏具体实现
面向对象的三大特性 封装 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界 面。面向对象计算始于这个基本概念,即现实世界可以被描绘成 一系列完全自治、封装的对象,这些对象通过一个受保护的接口 访问其他对象。 继承 多态 封装 特性 相同属性抽象成类 相同的类打成包 隐藏实现细节 访问权限
继承:类的重用
面向对象的三大特性 封装 继承 继承是一种联结类的层次模型,并且允许和鼓励类的重 用,它提供了一种明确表述共性的方法。对象的一个 新类可以从现有的类中派生,这个过程称为类继承。 新类继承了原始类的特性,新类称为原始类的派生类 (子类),而原始类称为新类的基类(父类)。派生 类可以从它的基类那里继承方法和实例变量,并且类 可以修改或增加新的方法使之更适合特殊的需要。 多态
通常认为访问控制是“隐藏实施细节”的一种方式。 将数据和方法封装到类内后,可生成一种数据类型. 它具有自己的特征与行为.
BirthDate.java(jvaabean使用) TtestBirthDate
访问控制符比较
Public 全局访问 Private 本类访问 Protected本类,同一个包的其他类,不同包的子 类可以访问 默认friendly 同一个类,同一个包的其他类
TestExtends
继承
继承特性: private修饰的成员不被继承 Java中不支持多继承 继承时: 子类自动拥有父类的成员(非private) 子类可以覆盖父类的成员(重写) 只能重写 public或protected或friendly方法 继承是为了更好的抽象,提高重用
一个父类可以有多个子类,但一个子类不可以有多个父 类,java不支持多继承. 解决此问题-- 接口可以多继承
多态-方法绑定
将一个方法调用同一个方法主体连接到一起就称为 “绑定”(Binding)。 早期绑定: 若在程序运行以前执行绑定(由编译器和链接程序, 如果有的话),就叫作“早期绑定”。 C编译器只有一种方法调用,那就是“早期绑定”。 后期绑定: 编译器不知道具体该调用哪个方法。 解决的方法就是“后期绑定”,它意味着绑定在运行 期间进行,以对象的类型为基础。后期绑定也叫作 “动态绑定”或“运行期绑定”。