[高等教育]java基础学习第4章课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《[高等教育]java基础学习第4章课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高等教育 java 基础 学习 课件
- 资源描述:
-
1、第四章第四章 类的重用类的重用JAVA语言程序设计清华大学 郑莉JAVA语言程序设计2目录目录l4.1 类的继承类的继承l4.2 Object类类 l4.3 终结类与终结方法终结类与终结方法l4.4 抽象类抽象类l4.5 类的组合类的组合 l4.6 包的应用包的应用l4.7 本章小结本章小结清华大学 郑莉JAVA语言程序设计34.1 类的继承类的继承l继承是一种由已有的类创建新类的机制继承是一种由已有的类创建新类的机制l父类是所有子类的公共属性及方法的集合,子类父类是所有子类的公共属性及方法的集合,子类则是父类的特殊化则是父类的特殊化,子类根据需要增加它自己的子类根据需要增加它自己的新的状态和
2、行为。新的状态和行为。lJava只支持类的单继承,每个子类只能有一个直只支持类的单继承,每个子类只能有一个直接父类接父类l继承机制可以提高程序的抽象程度,提高代码的继承机制可以提高程序的抽象程度,提高代码的可重用性可重用性l在在Java中每个类均为中每个类均为Object 的子类。的子类。(java.lang)清华大学 郑莉JAVA语言程序设计4一、一、继承的概念继承的概念基类和派生类基类和派生类l基类基类(base class)也称超类、父类(superclass)是被直接或间接继承的类l派生类派生类(derived-class)也称子类(subclass)继承其他类而得到的类 继承所有祖先
3、的状态和行为 派生类可以增加变量和方法 派生类也可以覆盖(override)继承的方法清华大学 郑莉JAVA语言程序设计5一、一、继承的概念继承的概念is_a关系关系l子类对象与父类对象存在子类对象与父类对象存在“IS A”(或或“is kind of”)的关系的关系清华大学 郑莉JAVA语言程序设计6l动物类层次举例动物类层次举例一、一、继承的概念继承的概念举例举例一般具体动物蛇蜥蜴鲸爬行动物哺乳动物狗巨蜥 壁虎壁虎 是一种 蜥蜴 爬行动物是 动物的 一种清华大学 郑莉JAVA语言程序设计7l错误的基础关系(错误的基础关系(HAS A)汽车发动机制动装置清华大学 郑莉JAVA语言程序设计8二
4、、二、子类声明子类声明l在类的声明中,通过使用关键字在类的声明中,通过使用关键字extends来创建一个类的子类,格式来创建一个类的子类,格式如下如下:class childClass extends parentClass/类体清华大学 郑莉JAVA语言程序设计9l在一个公司中,有普通员工(在一个公司中,有普通员工(Employees)及管及管理人员(理人员(Magagers)两类人员两类人员 普通员工对象(Employees)可能有的属性信息包括l员工号(employeeNumber)l姓名(name)l地址(address)l电话号码(phoneNumber)管理人员(Managers)
5、除具有普通员工的属性外,还可能具有下面的属性l职责(responsibilities)l所管理的职员(listOfEmployees)三、三、子类的继承性子类的继承性 类的设计举例清华大学 郑莉JAVA语言程序设计10lEmployee与与Manager的类图的类图三、三、子类的继承性子类的继承性 类的设计举例EmployeeemployeeNumbe:intname:Stringaddress:StringphoneNumber:StringManagerresponsibilities:StringlistOfEmployees:String父类父类子类子类清华大学 郑莉JAVA语言程序设
6、计11/父类父类Employeeclass Employee int employeeNumbe;String name,address,phoneNumber;public void work();/子类子类Managerclass Manager extends Employee /子类增加的成员变量 String responsibilities,listOfEmployees;EmployeeemployeeNumbe:intaddress:StringphoneNumber:Stringwork():voidManagerresponsibilities:Stringmanage()
7、:voidpersonName:String清华大学 郑莉JAVA语言程序设计13三、三、子类的继承性子类的继承性l类可以有两种重要的成员类可以有两种重要的成员 成员变量 成员方法l子类的成员中有一部分是子类自己声子类的成员中有一部分是子类自己声明定义的,另一部分是从它的父类继明定义的,另一部分是从它的父类继承的承的l子类继承父类可分两种情况子类继承父类可分两种情况 子类与父类同在一个包中 子类与父类不在同一个包中 清华大学 郑莉JAVA语言程序设计14子类和父类在同一包中的继承性 l如果子类和父类在同一个包中,那么,子如果子类和父类在同一个包中,那么,子类自然地继承了其父类中不是类自然地继承
8、了其父类中不是private的成的成员变量作为自己的成员变量,并且也自然员变量作为自己的成员变量,并且也自然地继承了父类中不是地继承了父类中不是private的方法作为自的方法作为自己的方法己的方法,继承的成员变量或方法的访问权继承的成员变量或方法的访问权限保持不变。限保持不变。l例子:例子:workspace/inherite/Example4_15.java 清华大学 郑莉JAVA语言程序设计15public class Father private int money;float weight,height;String head,hand,foot;void speak(String
9、s)System.out.println(s);public class Son extends Father String hobby;public class Example4_15 public static void main(String args)Son boy;boy=new Son();boy.weight=1.80f;boy.height=120f;boy.head=一个头一个头;boy.hand=两只手两只手;boy.foot=两只脚两只脚;boy.hobby=喜欢上网,有时上课还睡觉:)喜欢上网,有时上课还睡觉:);boy.speak(我是儿子我是儿子);System.o
10、ut.println(boy.hand+n+boy.foot+“n”+boy.head+“n”+“身高:身高:+boy.weight+boy.height+n+boy.hobby);子类不能继承子类不能继承子类新增属性我是儿子我是儿子两只手两只手 两只脚两只脚一个头一个头身高:身高:1.8120喜欢上网,有时上课还睡喜欢上网,有时上课还睡觉:)觉:)清华大学 郑莉JAVA语言程序设计16子类和父类不在同一包中的继承性 l如果子类和父类不在同一个包中,子如果子类和父类不在同一个包中,子类类可继承可继承父类的父类的protected、public成员变量做为子类的成员变量,并且成员变量做为子类的成
11、员变量,并且可继承父类的可继承父类的protected、public方方法为子类的方法法为子类的方法,继承的成员变量或继承的成员变量或方法的访问权限保持不变。方法的访问权限保持不变。l如果子类和父类不在同一个包中,子如果子类和父类不在同一个包中,子类类不能继承不能继承父类的父类的友好变量友好变量和和友好方友好方法法。清华大学 郑莉JAVA语言程序设计17例子:例子:Example4/inherite/ABC.java Example4/DEF.javapackage inherite;public class ABC protected int pro_i=5;protected void s
12、how()System.out.println(pro_i=+pro_i);import inherite.ABC;class DEF extends ABC public static void main(String agrs)DEF def=new DEF();System.out.println(def.pro_i);def.pro_i=10;def.show();如果变量如果变量pro_i不加访问权限,不加访问权限,会出现什么会出现什么情况?情况?Error:pro_i在在ABC.java中不是公共的,中不是公共的,无法从外部软件包中进行访问无法从外部软件包中进行访问清华大学 郑莉J
13、AVA语言程序设计18public class Person public String name;public String getName()return name;public class Employee extends Person public int employeeNumber;public int getEmployeeNumber()return employeeNumber;public class Manager extends Employee public String responsibilities;public String getResponsibiliti
14、es()return responsibilities;4.1.2 继承的语法继承的语法(续续)例例4_2 类的继承清华大学 郑莉JAVA语言程序设计19public class Exam4_2Test public static void main(String args)Employee li=new Employee();li.name=Li Ming;li.employeeNumber=123456;System.out.println(li.getName();System.out.println(li.getEmployeeNumber();Manager he=new Manag
15、er();he.name=He Xia;he.employeeNumber=543469;he.responsibilities=Internet project;System.out.println(he.getName();System.out.println(he.getEmployeeNumber();System.out.println(he.getResponsibilities();4.1.2 继承的语法继承的语法(续续)例例4_2测试测试 类的继承清华大学 郑莉JAVA语言程序设计20l运行结果运行结果Li Ming123456He Xia543469Internet proj
16、ectl说明说明 子类不能直接访问从父类中继承的私有属性及方法,但可使用公有(及保护)方法进行访问4.1.2 继承的语法继承的语法(续续)例例4_2测试结果测试结果 类的继承清华大学 郑莉JAVA语言程序设计21public class B public int a=10;private int b=20;protected int c=30;public int getB()return b;public class A extends B public int d;public void tryVariables()System.out.println(a);/允许 System.out.
17、println(b);/不允许 System.out.println(getB();/允许 System.out.println(c);/允许 4.1.2 继承的语法继承的语法(续续)例例4_3 类的继承清华大学 郑莉JAVA语言程序设计224.1.3 隐藏和覆盖隐藏和覆盖l隐藏和覆盖隐藏和覆盖 子类对从父类继承来的属性变量及方法可以重新定义类的继承清华大学 郑莉JAVA语言程序设计23l属性的隐藏属性的隐藏 子类中声明了与父类中相同的成员变量名,则从父类继承的变量将被隐藏 子类拥有了两个相同名字的变量,一个继承至父类,另一个由自己声明 当子类执行继承至父类的操作时,处理的是继承至父类的变量,
18、而当子类执行它自己声明的方法时,所操作的就是它自己声明的变量4.1.3 隐藏和覆盖隐藏和覆盖(续续)属性的隐藏属性的隐藏 class Parent Number aNumber;class Child extends Parent Float aNumber;类的继承清华大学 郑莉JAVA语言程序设计24l如何访问被隐藏的父类属性如何访问被隐藏的父类属性调用从父类继承的方法,则操作的是从父类继承的属性使用super.属性4.1.3 隐藏和覆盖隐藏和覆盖(续续)访问被隐藏的父类属性访问被隐藏的父类属性类的继承清华大学 郑莉JAVA语言程序设计25l属性的隐藏举例属性的隐藏举例class A1 i
19、nt x=2;public void setx(int i)x=i;void printa()System.out.println(x);4.1.3 隐藏和覆盖隐藏和覆盖(续续)例例4_4class B1 extends A1 int x=100;void printb()super.x=super.x+10;System.out.println (super.x=+super.x+x=+x);类的继承清华大学 郑莉JAVA语言程序设计26public class Exam4_4Test public static void main(String args)A1 a1=new A1();a1
20、.setx(4);a1.printa();B1 b1=new B1();b1.printb();b1.printa();b1.setx(6);/将继承来的x值设置为6 b1.printb();b1.printa();a1.printa();4.1.3 隐藏和覆盖隐藏和覆盖(续续)例例4_4测试测试类的继承清华大学 郑莉JAVA语言程序设计27l运行结果运行结果4super.x=12 x=10012super.x=16 x=1001644.1.3 隐藏和覆盖隐藏和覆盖(续续)例例4_4运行结果运行结果类的继承清华大学 郑莉JAVA语言程序设计28l 注意:注意:子类不能继承父类中的静态属性,但可
21、以子类不能继承父类中的静态属性,但可以对父类中的静态属性进行操作。对父类中的静态属性进行操作。l在上面的例子中,将在上面的例子中,将“int x=2;”改为改为“static int x=2;”,再编译及运行程序,会得到什么结果?再编译及运行程序,会得到什么结果?隐藏和覆盖隐藏和覆盖(续续)举例举例4super.x=14 x=10014super.x=16 x=1001616所有对象的类变量分配相同的内存空间所有对象的类变量分配相同的内存空间改变其中一个对象的这个类变量将会影响其它对象改变其中一个对象的这个类变量将会影响其它对象的这个类变量的这个类变量返回返回清华大学 郑莉JAVA语言程序设计
22、29 使用使用super调用父类的构造方法调用父类的构造方法l子类不继承父类的构造方法,因此,子类如果想使用父类的构造方法,必须在子类的构造方法中使用,并且必须使用关键字super来表示,而且而且super必须必须是子类构造方法中的头一条语句是子类构造方法中的头一条语句。注意:l如果在子类的构造方法中没有使用super调用父类的某个构造方法,默认为调用父类不带参数的构造方法l如果父类定义了多个构造方法,那么Java不提供默认构造方法。因此,当在父类中定义多个构造方法时,应包括一个无参构造方法例子:Example4_23清华大学 郑莉JAVA语言程序设计30l方法覆盖方法覆盖 如果子类不需使用从
23、父类继承来的方法的功能,则可以声明自己的同名方法,称为方法覆盖 覆盖方法的返回类型、方法名称、参数的个数及类型必须和被覆盖的方法一样 只需在方法名前面使用不同的类名或不同类的对象名即可区分覆盖方法和被覆盖方法lSuperTest(见后)方法覆盖时,不能降低方法的访问权限。4.1.3隐藏和覆盖隐藏和覆盖(续续)方法覆盖方法覆盖 Class Chengji protected float f(float x,float y)return x*y;Class Xiangjia extends Chengji float f(float x,float y)return x+y;访问权限降低,错误访问
24、权限降低,错误清华大学 郑莉JAVA语言程序设计31l方法覆盖的应用场合方法覆盖的应用场合子类中实现与父类相同的功能,但采用不同的算法或公式 在名字相同的方法中,要做比父类更多的事情 在子类中需要取消从父类继承的方法隐藏和覆盖隐藏和覆盖(续续)方法覆盖的应用场合方法覆盖的应用场合清华大学 郑莉JAVA语言程序设计32l容易混淆的概念容易混淆的概念 方法的重载(method overloading)方法的覆盖(method overriding)方法覆盖方法覆盖(override):如果子类不需使用从父类继承来如果子类不需使用从父类继承来的方法的功能,则可以声明自己的同名方法,称为方法的方法的功
25、能,则可以声明自己的同名方法,称为方法覆盖。覆盖方法的返回类型,方法名称,参数的个数及覆盖。覆盖方法的返回类型,方法名称,参数的个数及类型必须和类型必须和 被覆盖的方法一样。被覆盖的方法一样。子类方法不能缩小父子类方法不能缩小父类方法的访问权限类方法的访问权限。不能抛出比。不能抛出比subclass(父类父类)更多更多的异常的异常。方法重载方法重载(overload):一个类中可以有多个方法具有相同:一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,或者是参数的个数的名字,但这些方法的参数必须不同,或者是参数的个数不同,或者是参数的类型不同不同,或者是参数的类型不同,或者方法的返
展开阅读全文