java面向对象程序设计第5章_java 继承与接口

上传人:第*** 文档编号:49748348 上传时间:2018-08-02 格式:PPT 页数:34 大小:563.50KB
返回 下载 相关 举报
java面向对象程序设计第5章_java 继承与接口_第1页
第1页 / 共34页
java面向对象程序设计第5章_java 继承与接口_第2页
第2页 / 共34页
java面向对象程序设计第5章_java 继承与接口_第3页
第3页 / 共34页
java面向对象程序设计第5章_java 继承与接口_第4页
第4页 / 共34页
java面向对象程序设计第5章_java 继承与接口_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《java面向对象程序设计第5章_java 继承与接口》由会员分享,可在线阅读,更多相关《java面向对象程序设计第5章_java 继承与接口(34页珍藏版)》请在金锄头文库上搜索。

1、信息工程学院本科课程第5章 继承与接口主讲:赵建邦 办公室:信息学院202 E-mail:信息工程学院本科课程2本章主要内容n子类与父类n子类的继承性与子类对象n成员变量的隐藏和方法重写nsuper关键字nfinal关键字n对象的上转型对象n继承与多态nAbstract类与abstract方法n接口 难点:n成员变量的隐藏和方法重写n继承与多态信息工程学院本科课程5.1 子类与父类n继承是一种用已有的类创建新类的机制n父类(具有共有属性)n子类(具有特殊属性)n继承的语法: Class 子类名 extends 父类名 nJava不允许多重继承,一个子类只能有 一个父类3信息工程学院本科课程5.

2、2 子类的继承性n子类中的成员变量和方法:n或者继承自父类的成员变量和方法n或者来自于自身的特殊成员变量和方法n子类的继承性分为两种情况:n子类和父类在同一个包中n子类和父类不在同一个包中4信息工程学院本科课程5.2.1 子类和父类在同一包中n子类继承了父类中不是private的成员变 量作为自己的成员变量,并且继承了父 类中不是private的方法作为自己的方法n继承的成员变量或者方法访问权限不变n例5.15信息工程学院本科课程5.2.2 子类和父类不在同一包n子类继承了父类的protected、public成员 变量作为自己的成员变量,并且继承了 父类的protected、public方法

3、作为自己的 方法n继承的成员变量或方法的访问权限保持 不变6信息工程学院本科课程5.2.3 protected变量和方法7n假如有如下类依次继承:AB C Dn在其它类Other中创建的D对象d,使用D类 的protected成员变量和方法时:nprotected变量和方法来自于D,只需确保 Other类和D类在同一个包中信息工程学院本科课程继承的protected变量和方法11、ABC D假设:A,B,C,D中各自有一个protected成员,分别为a,b,c,d。 讨论:D的对象objD内的protected成员访问权限A、B类体内定义的objD只能访问a,b;A、B类体外定义的objD只

4、能访问a,b,Other类与A,B同包;C、D类体内定义的objD可以访问a,b,c,d;C、D类体外定义的objD只能访问c,d,Other类与C,D同包;信息工程学院本科课程继承的protected变量和方法22、ABC D假设:A,B,C,D中各自有一个protected成员,分别为a,b,c,d。 讨论:D的对象objD内的protected成员访问权限A类体内定义的objD只能访问a;A类体外定义的objD只能访问a,Other类与A,B同包;B类体内定义的objD可以访问 ;B类体外定义的objD可以访问 ,Other类与B同包;C、D类体内外定义的objD可以访问的protect

5、ed成员 与情况1相同;a,bb信息工程学院本科课程继承的protected变量和方法3Bird3、以下几个类中,Bird有一个protected变量nFeathers, 讨论以下情况中的访问权限:Duck1Duck2Duck4Duck3Duck1类体内可以直接访问 nFeathers,类体外不可以Duck3类体内定义一个Bird对象, 该对象 访问 nFeathers;不可以子类中用另外一个子类的对象也不能 访问父类中的protected变量不同包继承来之后就算protected 也只有自己可以访问信息工程学院本科课程5.3 子类对象的构造过程n子类对象调用自身构造方法之前,要先调用父 类的

6、构造方法,如果子类没有指定构造方法, 则默认调用父类的无参构造方法n子类不继承父类的私有成员变量n子类和父类不同包时,不继承父类的友好成员 变量n子类可以通过集成的方法操作未被继承的父类 成员变量n例5.211信息工程学院本科课程讨论1:子类对象的构造过程子类构造过程: 1、调用基类构造方法; 2、按声明顺序调用成员的初始化方法; 3、调用自身的构造方法。信息工程学院本科课程5.4.1 成员变量的隐藏n只要子类中声明的成员变量和父类中的 成员变量同名,则子类就隐藏了这个继 承的成员变量(新声明的成员变量可以 和父类同一类型)n子类可以调用继承的方法操作被隐藏的 父类成员变量n例5.313信息工

7、程学院本科课程5.4.2 方法重写(Override)n方法重写实际上是对父类方法的隐藏n方法重写的语法规则:n只要是子类能够继承的方法,都可以重写na、子类保持重写的方法类型与父类方法一致nb、子类重写的方法是父类方法类型的子类型nc、方法的名字、参数个数与类型和父类完全 相同n重写父类的方法时,不可以降低方法的访 问权限14信息工程学院本科课程5.5 super关键字n如果子类想要使用被隐藏的父类的成员变量或 方法,就使用super!n讨论1:父类中的构造方法n有一个无参和若干个有参n子类中没有用super,则默认调用super()n子类显示调用super,使用对应的构造方 法n仅有若干有

8、参构造方法n子类的构造方法必须和父类中某一构造方 法参数一致,并使用super(para,)调用15信息工程学院本科课程5.5 super关键字n使用super操作被子类隐藏的成员变量和 方法n例5.6,5.716子类隐藏的成员变量子类隐藏的方法子类继承的成员变量子类声明的成员变量子类声明或重写的方法子类继承的方法super.子类对象.信息工程学院本科课程5.6 final关键字n作用:修饰类、方法、成员变量和方法 中的局部变量nfinal类:不能被继承nfinal方法:不能被子类重写nfinal常量:不能被修改的成员变量或局部变 量, final常量必须在声明时赋值n例5.817信息工程学院

9、本科课程5.7 对象的上转型(upcasting)n假设A是父类,B是子类如果 A a; a=new B();或者 A a; B b=new B(); a=b;称对象a是b的上转型对象n上转型对象不能操作子类中新增的成员变量和方法n上转型对象可以访问子类继承或隐藏的成员变量n上转型对象可以调用子类继承的或重写的方法n父类对象和子类对象的上转型对象是不同的概念!n可以将上转型对象强制转换成一个子类对象n不可以颠倒父类子类的赋值顺序格式:“父类对象=子类对象引用”18信息工程学院本科课程5.8 继承与多态n多态分离了“做什么”和“怎么做”n改善代码的组织结构和可读性n使代码具有良好的“可扩展性”n

10、例5.10Circle Draw() Erase()Rect Draw() Erase()Triangle Draw() Erase()Shape Draw() Erase()信息工程学院本科课程5.9 abstract类和abstract方法nabstract类nAbstract class Anabstract方法nAbstract方法只能声明,不允许实现n不能和final同时声明同一个方法n例:abstract int min(int x,int y);信息工程学院本科课程5.9.1 abstract类n为什么要引入抽象类?n抽象类可以在不影响程序的抽象结构情况下实 现抽象方法的多态性n

11、例5.11,5.12Circle Draw() Area()Rect Draw() Area()Triangle Draw() Area()Shape Draw() Area()信息工程学院本科课程5.9.1 abstract类使用注意事项nabstract类可以有abstract方法,也可以有非 abstract方法,抽象方法不能有方法体nabstract不能用于修饰局部变量、属性、构造 器。nabstract类不能用new创建对象,不能被实例化n如果一个类包含一个以上的抽象方法,该类必 须被声明为抽象类n一个非抽象类是某个抽象类的子类,那么它必 须重写父类所有的抽象方法所以,不允许用fin

12、al和abstract同时修饰一个方法信息工程学院本科课程5.9.2 abstract类与多态n抽象类只关注操作,不关心具体实现细 节,所以,在设计程序架构时可以在抽 象类中定义多个抽象方法,其细节由非 抽象子类完成。n向上转型保证了抽象类的多态性n利用多态设计程序,体现程序设计的“开- 闭”原则。对下层扩展开放,对上转型修 改关闭n例5.13信息工程学院本科课程5.10 接口n“interface”关键字使abstract的概念更前进了一 步,接口可以看作是“纯粹”的抽象类n接口体中只可以有常量和抽象方法,没有非抽 象方法n由于接口只是规范,所以接口里不能包括构造 器、初始化块。n允许省略p

13、ublic、final、static、abstract修饰符interface Printablepublic static final int MAX = 100;public abstract void add();接口体信息工程学院本科课程5.10.1 类如何使用接口n修饰符interface接口名extends 父接口1, 父接口2,n修饰符只能是public或者省略nclass A implements Printable,Addable nclass Dog extends Animal implements Eatable,Sleepablen如果类实现了某接口,那么这个类必须重

14、写接口的 所有方法n类在重写接口方法时必须去掉abstract修饰,方法 的权限一定显式用public修饰n例5.14信息工程学院本科课程5.10.1 接口常量的使用接口的常量必须被初始化常量可以被类名和接口名直接调用相当于public static final int MAX = 100;信息工程学院本科课程5.10.1 接口的分类n用public声明的接口成为public接口npublic接口可以被任何一个类声明实现n没有public声明的接口为友好接口n友好接口只能被包内的类声明实现n父类实现了某个接口,则子类默认会实 现该接口信息工程学院本科课程5.10.1 接口的继承n一个Java源

15、文件里最多只能有一个public 接口,如果一个Java源文件里定义了一 个public接口,则该源文件的主文件名必 须与该接口名相同。n接口支持多继承,子接口扩展某个父接 口,将会获得父接口里定义的所有抽象 方法、常量属性等。n接口不能继承类信息工程学院本科课程5.10.1 接口的继承(实例)信息工程学院本科课程5.10.2 理解接口n接口可以增加许多类需要具有的功能, 使得不同的类可以实现相同的接口,这 些类不需要有继承关系例5.15信息工程学院本科课程5.10.3 接口回调n接口回调是指把实现某一接口的类创建 的对象的引用赋给该接口声明的变量n接口变量调用接口方法,等价于对象调 用该方法n例5.16信息工程学院本科课程5.10.4 接口与多态n不同的类在实现同一个接口时,其实现 方式是不同的,接口变量在回调接口方 法时,便具有多种形态n使用接口进行程序设计的核心思想是使 用接口回调n利用接口也可以实现“开-闭”原则n例5.17信息工程学院本科课程5.10.5 abstract类与接口nabstract类和接口都可以有abstract方法n接口中只可以有常量,不能有变量, abstract类既可以有常量,也可以有变量nabstract类可以有非abstract方法,但接 口不可以信息工程学院本科课程谢谢!

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号