[理学]第5章 继承、接口与泛型

上传人:tia****nde 文档编号:70862716 上传时间:2019-01-18 格式:PPT 页数:48 大小:1.52MB
返回 下载 相关 举报
[理学]第5章 继承、接口与泛型_第1页
第1页 / 共48页
[理学]第5章 继承、接口与泛型_第2页
第2页 / 共48页
[理学]第5章 继承、接口与泛型_第3页
第3页 / 共48页
[理学]第5章 继承、接口与泛型_第4页
第4页 / 共48页
[理学]第5章 继承、接口与泛型_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《[理学]第5章 继承、接口与泛型》由会员分享,可在线阅读,更多相关《[理学]第5章 继承、接口与泛型(48页珍藏版)》请在金锄头文库上搜索。

1、第5章 继承、接口与泛型,本章导读 1. 子类与父类 2. 子类的继承性 3. 子类对象的构造过程 4. 成员变量隐藏和方法的重写 5. super关键字 6. final类与final方法 7. 对象的上转型对象,8. 继承与多态 9. 使用abstract类 10.接口 11.接口回调 12.内部类 13.匿名类 14.异常类 15.泛型类,5.1 子类与父类,由继承而得到的类称为子类,被继承的类称为父类(超类、基类)。,返回,定义子类: class 子类名 extends 父类名 ,父类,子类1,子类2,子类n,动物类,猫类,狗类,羊类,指明继承关系,例:,5.2 子类的继承性,类继承就

2、是子类继承父类的成员变量和方法作为自己的成员变量和方法,就好象它们是在子类中直接声明一样。,父类可以是自己编写的类也可以是Java类库中的类。 Java不支持多重继承,即子类只能有一个父类。,举例: TestExtends.java,(利用继承有利于实现代码的重复使用,子类只需要添加新的功能代码即可。),子类自然地继承了其父类中的所有成员作为自己的成员。 继承的成员变量以及方法的访问权限保持不变。,5.2 子类的继承性,看例子5-1:,Father类 private int moneyDollar int moneyHK int add(int x,int y),Son类 int moneyR

3、MB public void changMoneyRMB(int x) int subs(int x,int y),private int moneyDollar int moneyHK int add(int x,int y),GrandSon类 private int moneyDollar int moneyHK int add(int x,int y) int moneyRMB public void changMoneyRMB(int x) int subs(int x,int y) int multi(int x,int y),子类的构造方法总是先调用父类的某个构造方法。 默认调用

4、父类构造方法: super() ; 举例:C1.java,思考:若子类构造方法既没有显式调用父类构造方法,而父类中又没有无参的构造方法,会怎样?,显式调用父类的构造方法: super(参数列表) ; 该语句必须为子类构造方法的第1条可执行语句。 举例: C2.java,会编译出错。,5.3 子类对象的构造过程,class A int ax; public A(int ax) this.ax=ax; System.out.println(“调用A类中有参数的构造方法,ax=“ + ax); class B extends A int by; public B(int x,int by) supe

5、r(x); this.by=by; class C2 public static void main(String args) B b=new B(66,88); System.out.println(b.ax+“,“+b.by); ,5.4 成员变量的隐藏和方法的重写,1成员变量的隐藏 在子类中定义和父类中同名的成员变量。 变量的类型可以不同。 举例:Example5_3.java ?类B中都包含哪些成员变量、哪些方法?,Java规定,当执行从父类继承的方法时,处理的是继承自父类的变量;当子类执行由自己定义的方法时,处理的是自己定义的成员变量,而将继承自父类的名称相同的成员变量隐藏起来。 若

6、想要访问被隐藏的成员变量,必须在成员变量前面添加前缀,前缀用关键字super加圆点操作符。,5.4 成员变量的隐藏和方法的重写,2方法重写 (覆盖) 方法的重写是在子类中定义和父类中方法名相同、参数表相同和返回值类型相同的方法,这时,子类中的方法将会覆盖父类中的同名方法。 举例:Example5_4.java 如果子类中想使用被隐藏的方法,必须使用关键字super。 说明: (1)Java5.0版规定,若返回类型是类类型,则可以把返回类型改变为该类的任何子孙类. (2)在子类中不能将它们的访问权限改变为更受限制的访问权限. 如:父类方法是public的,则子类重写方法也必须是public的。,

7、5.4 成员变量的隐藏和方法的重写,(3)注意区分重载和重写. 如果在子类中定义与父类同名的方法,参数个数或参数类型与父类的方法不尽相同,那实际上也没有重写继承的方法,这时子类就出现两个方法具有相同的名字(方法的重载) 。 举例:见Example5_5.java,5.5 super 关键字,1使用super调用父类的构造方法 子类不继承父类的构造方法。 格式:super(参数列表); 举例:Example5_6.java,TestStudent.java 不能在构造方法中同时使用super()和this() .,返回,2使用super操作被隐藏的成员变量和方法 格式:super.父类成员变量;

8、 super.父类成员方法(参数列表); 注意:(1)只有在子类方法的定义中,可以使用super。 (在子类定义的外部,不能使用子类的对象调用父类中已经被覆盖的方法。) (2)不允许出现多重super,如:super.super.f(); 举例:Example5_7.java,5.6 final 类和final方法,final类不能被继承,即不能有子类; final方法不能在子类被重写. 将一个类声明为final类一般是由于安全性考虑。 举例:见API中的String类和数据包装类,返回,public final class String extends Object,表明String类的功能

9、固定下来。,Object是所有类的父类。 若一个类没指明父类,则默认从Object类继承。,5.7 对象的上转型对象,1对象的上转型 假设,B是A的子类或间接子类 下面代码: A a; B b =new B(); a=b;,或写成 A a=new B(); 那么就称对象a是子类对象b的上转型对象.,A类,B类,5.7 对象的上转型对象,对象的上转型对象的实体是子类负责创建的,但上转型对象会失去原对象的一些属性和功能。 上转型对象具有如下特点(见下图所示)。,5.7 对象的上转型对象,举例:Example5_8.java,上转型对象是子类创建的实体,所以将上转型对象再强制转换到一个子类对象时,

10、B b=(B)a; 该子类对象b又具备了子类所有属性和功能。,新增成员,继承或重写的成员,父类A,子类B,A a=new B();,说明: 上转型对象是子类对象的“简化”状态,它不关心子类新增的功能,只关心子类继承和重写的功能。,a对象能访问的,b对象能访问的,B b=(B)a;,A aa=new A();,aa对象能访问的,上转型对象不是父类创建的对象。,5.7 对象的上转型对象,(补) 2. 下转型:,返回,A类,B类,从父类到子类的类型转换,如: A a=new A(); B b; b=(B)a;,注意: 上述转换虽没有语法错误,但会出现运行时错误ClassCastException。

11、只有有意义的下转型转换,才不会出现编译或运行错误。 如:,一定要加类型转换,A a=new B();,B b=(B)a;,或:B bb=(B)new A();,3. 使用instanceof运算符查看下转型是否合法,格式:引用值 instanceof 类名 作用:用来判断一个实例是否是指定类的实例,当引用值所指向的实例是指定类的实例时,返回true,否则返回false。 若B类是A类的子类,下面几种情况,使用instanceof的返回值为true: (1)A a=new A();则a instanceof A (2)B b=new B();则b instanceof A (3) A a=new

12、 B();则a instanceof B,5.8 继承与多态,举例:Example5_9.java,当使用上转型对象在调用这个方法时就可能具有多种形态(不同的行为)。,Animal类 cry(),Dog类 重写cry(),Cat类 重写cry(),Animal animal; animal =new Dog(); animal.cry(); animal=new Cat(); animal.cry();,作业:,P109 问答题:1-11(练习) 上机作业: 实验六:1,2,9,10,复习:,继承的关键字:extends 子类的继承性:子类自然地继承了其父类中的所有成员作为自己的成员。 子类对

13、象的构造过程:子类的构造方法总是先调用父类的某个构造方法。super(参数列表); 成员变量的隐藏和方法的重写: super 关键字的使用:直接父类的一个引用。 final 类和final方法:final类不能派生子类,final方法不能被重写。 对象的上转型对象:父类的引用指向子类的实例。 继承与多态:继承、方法重写是多态的两个条件。,5.9 abstract类和abstract方法,抽象类:表示抽象概念的类,抽象类为子类提供一个实现框架,本身却不能提供具体的实例。,抽象方法是只有方法头而没有方法体的方法。,抽象类A:,抽象方法min:,abstract class A ,abstract

14、boolean min();,关键字abstract表示抽象意义。,5.9 abstract类和abstract方法,抽象类的特点: 一个abstract类只关心子类是否具有某种功能,不关心功能的具体实现。具体实现由子类负责。 (如笔类,我们关心它具有书写的功能,既只要能写字就算笔,但如何书写,由子类,如铅笔、钢笔、毛笔负责。) 包含抽象方法的类必须被声明为抽象类。,class Animal abstract void cry(); ,abstract,如果抽象类的子类不是抽象的,它必须重写父类中的所有抽象方法。,5.9 abstract类和abstract方法,抽象类是本身不能被实例化的类,

15、它只能作为其它类的超类。 虽然不能创建抽象类的实例,但可以创建抽象类类型的变量。,class Dog extends Animal ,void cry() System.out.println(“Wang!Wang!“); ,如果抽象类的子类不是抽象的,它必须重写父类中的所有抽象方法。,只要把abstract关键字去掉,再按常规方法重写即可。 最简单的重写只是加一对空。,Animal a=new Animal();,Animal a;,Animal是抽象类,5.10 面向抽象,(如:“拿出笔做记录。”,笔是抽象的,对于听众来说,既可以用钢笔,也可以用铅笔,或者任何能写字用的笔。),举例: 求柱

16、形的体积。(见”面向抽象-实例”文件夹) 分析:柱形的体积=底面积*高 底的形状可能是圆形、梯形、方形 面向对象编程要想好定义哪些类:柱形类、圆形类、梯形类、方形类,开闭原则:就是一个程序对扩展开放,对修改关闭。 所以还要定义一个抽象类:图形类,该类有一个求面积的方法。圆形类、梯形类、方形类等继承于图形类。,5.10 面向抽象,(1)抽象细节(在Pillar类中体现) 将经常需要变化的部分分割出来,用abstract类和abstract方法,不让设计者去关心实现的细节,避免所设计的类依赖于这些细节。 (2)面向抽象设计类:指创建Geometry。,返回,Pillar,bottom: height:double getVolume():double,Geometry,Geometry,getArea() :double,Circle,r: double getArea():double,Lader,a,b,h : double getA

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

当前位置:首页 > 高等教育 > 大学课件

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