大串 South China Agr icultur al University 第九章多态性
第九章 多态性
主要类容: ◆91延迟绑定 ◆9.2由继承实现多态性 ◆93利用接口是想多态性 ◆94排序 ◆9.5搜索 ◆9.6多态性设计 ◆97事件处理 ◆98文件选择对话框 ◆9.9颜色选择对话框 ◆9.10滑动条
主要类容: ◆ 9.1 延迟绑定 ◆ 9.2 由继承实现多态性 ◆ 9.3 利用接口是想多态性 ◆ 9.4 排序 ◆ 9.5 搜索 ◆ 9.6 多态性设计 ◆ 9.7 事件处理 ◆ 9.8 文件选择对话框 ◆ 9.9 颜色选择对话框 ◆ 9.10 滑动条
91延迟绑定 ■通常一个引用变量的类型要与其引用的对象的类 相匹配。 ChessPiece bishop; ■引用变量的类型和该引用变量指向的对象必须是 菲容的,但不必完全相同。 ■多态性可以理解为多种形式,一个多态性引用是 可以在不同时间指向不同类型对象的引用变量。 ■利用多态性调用的方法能够由一个调用改变为另 个调用
◼通常一个引用变量的类型要与其引用的对象的类 相匹配。 ChessPiece bishop; ◼ 引用变量的类型和该引用变量指向的对象必须是 兼容的,但不必完全相同。 ◼多态性可以理解为多种形式,一个多态性引用是 可以在不同时间指向不同类型对象的引用变量。 ◼利用多态性调用的方法能够由一个调用改变为另 一个调用。 9.1 延迟绑定
■如下代码: obj.do工t(); ■如果obj引用是多态性,可以在不同时刻指向不同类型的对象。 在一个程序执行的某个时刻可能会产生一个请求事件,要求执行 某段代码来完成一个方法调用,这种请求事件称为一个方法调用 与一个方法定义的绑定。 ■如果绑定发生在编译阶段,那么每次引用方法的代码都相同。 ■对于多态性引用,绑定要延迟到程序运行时才能执行,延迟的请 求事件称为延迟绑定或者动态绑定 延迟绑定能给程序设计带来交大的灵活性。 ■在java中用继承方式和接口方式来建立多态性引用
◼ 如下代码: obj.doIt(); ◼ 如果obj引用是多态性,可以在不同时刻指向不同类型的对象。 ◼ 在一个程序执行的某个时刻可能会产生一个请求事件,要求执行 某段代码来完成一个方法调用,这种请求事件称为一个方法调用 与一个方法定义的绑定。 ◼ 如果绑定发生在编译阶段,那么每次引用方法的代码都相同。 ◼ 对于多态性引用,绑定要延迟到程序运行时才能执行,延迟的请 求事件称为延迟绑定或者动态绑定。 ◼ 延迟绑定能给程序设计带来交大的灵活性。 ◼ 在java中用继承方式和接口方式来建立多态性引用
92由继承实现多态性 口当用类声明了一个引用变量时,该变量可以指向 该类的任何一个对象,此外还可以指向由继承关 系的任何对象。 比如:类ho1ida派生出一个类 christmas, 个 holiday类引用能够指向一个 christmas类变 Holiday Holiday day i day new Chris tmas o )i Christmas
5 9.2 由继承实现多态性 ◼当用类声明了一个引用变量时,该变量可以指向 该类的任何一个对象,此外还可以指向由继承关 系的任何对象。 ◼比如:类holiday派生出一个类christmas,一 个holiday类引用能够指向一个christmas类变 量。 Holiday day; day = new Christmas(); Holiday Christmas
References and inheritance ■也可以将父类对象赋给一个子类引用,但是需要 进行类型转换。一般不常用,可能会引起问题。 个 object引用可以指向任何对象。因为所有类 都是由 object类派生的
6 References and Inheritance ◼也可以将父类对象赋给一个子类引用,但是需要 进行类型转换。一般不常用,可能会引起问题。 ◼一个object引用可以指向任何对象。因为所有类 都是由object类派生的
■被引用对象类型决定被调用方法,而不是引用类型。 ■如果 Holiday类有一个方法叫 celebrate Christmas类重载了这个方法。 Now consider the following invocation: day. celebrate o)i
◼ 被引用对象类型决定被调用方法,而不是引用类型。 ◼ 如果 Holiday 类有一个方法叫 celebrate, Christmas 类重载了这个方法。 ◼ Now consider the following invocation: day.celebrate();
Polymorphism via Inheritance ■分析下列类层次结构: StaffMember Volunteer Employee Executive Hourly
Polymorphism via Inheritance ◼ 分析下列 类层次结构: StaffMember Executive Hourly Volunteer Employee
Polymorphism via Inheritance Now let's look at an example that pays a set of diverse employees using a polymorphic method See Firm iava(page 317) See Staff, iava(page 319) See StaffMember, iava(page 320) See volunteer, iava(page 321) See Employee iava(page 322) See Executive iava(page 323) See Hourly, iava(page 324)
Polymorphism via Inheritance ◼ Now let's look at an example that pays a set of diverse employees using a polymorphic method • See Firm.java (page 317) • See Staff.java (page 319) • See StaffMember.java (page 320) • See Volunteer.java (page 321) • See Employee.java (page 322) • See Executive.java (page 323) • See Hourly.java (page 324)
93利用接口实现多态性 ■接口名可以用作声明对象引用变量的类型。 public interface Speaker i public void speak Speaker current public boid announce( String str) 个接口引用变量可以指向任何实现该接口的实现类的 对象。实现类于其所实现的接口关系如同子类于父类的关 系,实现类与其接口之间有“是一种”关系 ■执行代码时实际调用的方法取决于调用发生时候接口引 用所指向的对象的类型。 current speak o)i
9.3 利用接口实现多态性 ◼接口名可以用作声明对象引用变量的类型。 public interface Speaker { public void speak(); public boid announce (String str); } ◼Speaker current; ◼ 一个接口引用变量可以指向任何实现该接口的实现类的 对象。实现类于其所实现的接口关系如同子类于父类的关 系,实现类与其接口之间有“是一种”关系。 ◼ 执行代码时实际调用的方法取决于调用发生时候接口引 用所指向的对象的类型。 current.speak();