Chapter 4-2 继承、多态与接口
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
继承
动物类 动物
父类
食肉类 食肉
父类/ 父类/子类 是相对的 牛类
食草类 食草
狮子类 狮子
老虎类
羊类
子类
类的继承
继承:允许程序在保持原有类的属性与行为上,进行 更为具体、更加详细的定义,以完成复杂的应用; 继承:新的类从已有类那里得到已有特性; 从另一角度看,从已有的类产生新类的过程就是类的 派生; is-a .(纵向联系)
多态性
• 多态性是指“多种形式” • 它使用相同的方法名,不同的实例而执行 不同操作
Example (多态实例) cry_test.java 课本P.74
多态性
子类 - 绘制和移动三角形
Triangle Draw () { DrawTraingle } Move () { MoveTriangleVertices }
接口定义的实例
• Example (接口定义实例)
接口设计思想
• 目标:设计公共汽车、出租车、电影院三个 类;类实现空调情况、收费情况两个接口。 (接口设计思想示例)
接口设计思想(续 接口设计思想 续)
纵 向 联 系 汽车
公共汽车
出租车 横向联系
电影院
interface 空调情况 { void aircondition(); } interface 收费情况 { void get_fee(); }
汽车
公共汽车
Fee GetFee()
出租车
Fee GetFee()
私家轿车
类的继承
格式: 格式: 子类名称 extends 父类名称 说明: 、 中的继承通过关键字extends来实现。 来实现。 说明:1、JAVA中的继承通过关键字 中的继承通过关键字 来实现 2、子类可以从父类中继承所有非私有修饰符的成员变量和 、 方法作为自己的成员。 方法作为自己的成员。 3、子类中增加父类中没有的成员变量和方法。 3、子类中增加父类中没有的成员变量和方法。 4、单继承,只有一个直接父类。 、单继承,只有一个直接父类。 对于继承非私有(private)修饰的成员变量 域)和方法。 修饰的成员变量(域 和方法 和方法。 对于继承非私有 修饰的成员变量 1、成员变量:不同名,子类从父类中继承。同名,子类隐 、成员变量:不同名,子类从父类中继承。同名, 藏父类的同名变量。 如何重新取出父类同名变量? 藏父类的同名变量。(ps:如何重新取出父类同名变量 如何重新取出父类同名变量 super.同名变量 同名变量) 同名变量 2、方法:不同名,子类从父类中继承。同名,子类覆盖父 、方法:不同名,子类从父类中继承。同名, 类的同名方法。 类的同名方法。
为什么要用接口(续 为什么要用接口 续)
• (1) 接口能解决的问题:需要多继承的情形; ps: 继承不能解决。 • (2) 通常是这些类的属性:-able, eg. Runnable, Printable, Comparable 。
接口
• 接口声明:[public] interface interfaceName { ... } class A implements interface1, interface2; ps: 跟类声明完全类似,区别多继承; • public:全局可访问;无public(默认): 同包可访问。 ps: 跟类的访问权限一致。
接口和抽象类区分
• 一致性:都使用抽象方法; • 抽象、不可实例化的概念用abstract class,eg. 形状 用于类型隐藏; • 区别1:abstract class可以有变量、非abstract成员方 法;interface仅有常量、abstract成员方法 interface 可以看作特殊的abstract class。 • 区别2:abstract class单继承;interface多继承。 • 区别3(设计理念):abstract class是继承,具有is-a关 系,概念本质相同,interface不要求(一般是-able,即 性质)。
补充知识: 1、return 返回值; 对话框内字符串 对话框标题字符串 2、JOptionPane //对话框类 showMessageDialog //告知用户某事已发生
JOptionPane.showMessageDialog(null, string1, string2, JOptionPane.INFORMATION_MESSAGE);
同类:自己;子类:子孙;同包:同班;全局:全人类 没定义包,同一目录下视为一个包;
类的访问权限
访问修饰符 private(私房钱) public(全世界共有) 不加说明 默认(包访问) 同类 √ √ √ 子类 × √ × 同包 × √ √ 全局 × √ ×
公共类public 不加说明(默认) default 私有类private:一般不用,内部类可用
类的继承设计思想实例
公共变量 公共方法 构造函数; 设置点坐标函数; 构造函数; 设置点坐标函数; 点坐标x,y 点坐标x,y 得到点坐标函数;toString(); 得到点坐标函数;toString(); 构造函数; 设置得到半径函数; 构造函数; 设置得到半径函数; 半径radius 半径radius 面积函数;toString() 面积函数;toString() 构造函数; 设置得到高度函数; 构造函数; 设置得到高度函数; 高度height 高度height 面积、体积函数;toString() 面积、体积函数;toString()
Chapter 4-2. 继承、多态与接口 继承、
4.8 类的继承 4.9 this和super变量 4.10 访问权限 4.11 多态 4.12 内部类 4.13 接口 4.14 特殊的类: Object
成员变量、 成员变量、成员方法的访问权限
访问修饰符 private(私房钱) protected(大熊猫) public(全世界共有) 默认(friendly)(包访问) 同类 √ √ √ √ 子类 × √ √ × 同包 × √ √ √ 全局 × × √ ×
接口的定义
• (1) 接口:interface; • (2) 接口体:常量和方法两部分。 • (3) 接口中定义的变量是最终的静态变量(常量); • (4) 接口没有自身构造函数(因为不是类),方法均是 抽象方法,即只提供方法定义,而不提供方法的实 现。 • (5) 接口采用多重继承机制, ps: 与类的单一继承不同。 • (6) 接口可看成是特殊的抽象类。
this
• this:引用当前对象; 当 参数名与类中变量名重名时,或调用类中其他 构造函数时使用。
• Example (this实例)
• 理解:this是指向当前对象本身的一个指针; super以后讲 引用当前对象的直接父类。
super
• super:引用当前对象的直接父类。 调用父类的构造函数(目的:想要初始化父类成 员变量)(往往在构造函数中用) 或 当 子类变量 隐藏父类同名变量时,希望重新取出父类同名 变量 时使用 Example (super实例) Queen.java • 理解:super指向当前对象的直接父类的指针。
父类 Shape
Draw () Move ()
子类 - 绘制和移动矩形
Rectangle Draw () { DrawRectangle } Move () { MoveRectangleCorner }
子类 - 绘制和移动五边形
Pentagon Draw () { DrawPentagon } Move () { MovePentagonVertices }
Chapter 4-2. 继承、多态与接口 继承、
4.8 类的继承 4.9 this和super变量 4.10 访问权限 4.11 多态 4.12 内部类 4.13 接口 4.14 特殊的类: Object
Chapter 4-2. 继承、多态与接口 继承、
4.8 类的继承 4.9 this和super变量 4.10 访问权限 4.11 多态 4.12 内部类 4.13 接口 4.14 特殊的类: Object
类的继承设计思想
利用类的继承进行程序设计时,可以先定义一个包 含公共变量和公共方法的类作为父类。再在此基础 上,创建具有自身变量和方法的子类。 子类一方面可以增加父类中没有的变量和方法;另 一方面可以在继承的基础上重新定义父类中已有的 变量和方法。
类的继承示意
车 纵 向 联 系
Air_condition Door_number AirCondition() DoorOpen() DoorClose() Wheel_number vehicleStart() vehicleStop()
类的继承(续 类的继承 续)
Extends_test.java (继承实例)(子类继承父类 中的成员变量和方法)
Extends_test2.java (继承实例)(子类方法覆盖 父类中同名方法)
类的继承(续 类的继承 续)
Example P.67 (类的继承实例) Example
(运行Point.java; Circle.java; Cylinder.java; Test_inherit.java) (看代码.java文件)
面向对象程序设计基础
沈斌(BIN Shen), PhD, Lecturer
tsingbin@zju.edu.cn
浙江大学宁波理工学院
Trip begins~
Chapter 4-2. 继承、多态与接口 继承、
Chapter 4-2. 继承、多态与接口 继承、
4.8 类的继承 4.9 this和super变量 4.10 访问权限 4.11 多态 4.12 内部类 4.13 接口 4.14 特殊的类: Object
为什么要用接口
车 纵 向 联 系
Door_number DoorOpen() DoorClose() Wheel_number vehicleStart() vehicleStop()
汽车
公共汽车
出租车 横向联系
私家轿车
接口interface Air_condition { void aircondition(); }
成员变量的访问权限
• Example (private变量实例) • Example (protected变量实例) • Example (public (public变量实例) ) • Example (默认变量实例) • 课本 P64
Chapter 4-2. 继承、多态与接口 继承、
4.8 类的继承 4.9 this和super变量 4.10 访问权限 4.11 多态 4.12 内部类 4.13 接口 4.14 特殊的类: Object
Point类 Point类 Circle类 Circle类 Cylinder类 Cylinder类
前述中的类的继承实例
Example (抽象类实例中的继承) Java API自身的继承: eg. Java.lang的 分层结构(见html文件)
பைடு நூலகம்
Chapter 4-2. 继承、多态与接口 继承、
4.8 类的继承 4.9 this和super变量 4.10 访问权限 4.11 多态 4.12 内部类 4.13 接口 4.14 特殊的类: Object
Super实例 实例
• 课本 P78
类构造函数原则
super调用父类的构造函数, 可带参数或不带参数。 先调用父类构造方法, 再调用子类构造方法 如构造函数第一个语句没有 用super,则编译器默认调 用父类的不带参数的构造函 数。此时要求父类中存在不 要调用父类构造方法,使用 关键字 super 带入口参数的构造函数。 如构造函数第一个语句用 this调用该类其他构造函数, 子类构造方法的名 则编译器不再默认调用父类 称与类的名称相同 的构造函数。
接口和抽象类区分(续 接口和抽象类区分 续)
同类:自己;子类:子孙;同包:同国家;全局:全人类 没定义包,同一目录下视为一个包;
继承中的访问权限
访问修饰符 private(私房钱) protected(大熊猫) public(全世界共有) 默认(friendly)(包访问) 同类 √ √ √ √ 子类 × √ √ × 同包 × √ √ √ 全局 × × √ ×