Java语言程序设计:第4章 类的重用

上传人:经*** 文档编号:295541461 上传时间:2022-05-20 格式:PPT 页数:125 大小:1.13MB
返回 下载 相关 举报
Java语言程序设计:第4章 类的重用_第1页
第1页 / 共125页
Java语言程序设计:第4章 类的重用_第2页
第2页 / 共125页
Java语言程序设计:第4章 类的重用_第3页
第3页 / 共125页
Java语言程序设计:第4章 类的重用_第4页
第4页 / 共125页
Java语言程序设计:第4章 类的重用_第5页
第5页 / 共125页
点击查看更多>>
资源描述

《Java语言程序设计:第4章 类的重用》由会员分享,可在线阅读,更多相关《Java语言程序设计:第4章 类的重用(125页珍藏版)》请在金锄头文库上搜索。

1、第四章第四章 类的重用类的重用JAVA语言程序设计JAVA语言程序设计2目录目录l4.1 类的继承类的继承l4.2 Object类类 l4.3 终结类与终结方法终结类与终结方法l4.4 抽象类抽象类l4.5 类的组合类的组合 l4.6 包的应用包的应用l4.7 本章小结本章小结JAVA语言程序设计34.1 类的继承类的继承l类的继承类的继承一种由已有的类创建新类的机制,是面向对象程序设计的基石之一通过继承,可以根据已有类来定义新类,新类拥有已有类的所有功能Java只支持类的单继承,每个子类只能有一个直接父类父类是所有子类的公共属性及方法的集合,子类则是父类的特殊化继承机制可以提高程序的抽象程度

2、,提高代码的可重用性JAVA语言程序设计4l基类基类(base class)也称超类(superclass)是被直接或间接继承的类l派生类派生类(derived-class)也称子类 (subclass)继承其他类而得到的类继承所有祖先的状态和行为派生类可以增加变量和方法派生类也可以覆盖(override)继承的方法4.1.1 继承的概念继承的概念基类和派生类基类和派生类类的继承JAVA语言程序设计5l子类对象与父类对象存在子类对象与父类对象存在“IS A”(或或“is kind of”)的关系的关系4.1.1 继承的概念继承的概念is_a关系关系类的继承JAVA语言程序设计6l动物类层次举例

3、动物类层次举例4.1.1 继承的概念继承的概念图图4_1一般具体动物蛇蜥蜴鲸爬行动物哺乳动物狗巨蜥 壁虎壁虎 是一种 蜥蜴 爬行动物是 动物的 一种类的继承JAVA语言程序设计7l举例举例4.1.1 继承的概念继承的概念又一个例子又一个例子类的继承JAVA语言程序设计8l派生类产生的对象派生类产生的对象从外部来看,它应该包括l与基类相同的接口l可以具有更多的方法和数据成员其内包含着一个基类类型的子对象4.1.1 继承的概念继承的概念派生类对象派生类对象JAVA语言程序设计94.1.2 继承的语法继承的语法l继承的语法继承的语法class childClass extends parentCla

4、ss /类体类的继承JAVA语言程序设计10l在一个公司中,有普通员工(在一个公司中,有普通员工(Employees)及管及管理人员(理人员(Magagers)两类人员两类人员l职员对象(职员对象(Employees)可能有的属性信息包括可能有的属性信息包括员工号(employeeNumber)姓名(name)地址(address)电话号码(phoneNumber)l管理人员(管理人员(Managers)除具有普通员工的属性外,除具有普通员工的属性外,还可能具有下面的属性还可能具有下面的属性职责(responsibilities)所管理的职员(listOfEmployees)4.1.2 继承的

5、语法继承的语法(续续)例例4_1 类的继承JAVA语言程序设计11lEmployee与与Manager的类图的类图4.1.2 继承的语法继承的语法(续续)例例4_1 EmployeeemployeeNumbe : intname : Stringaddress : StringphoneNumber : StringManagerresponsibilities:StringlistOfEmployees:String类的继承JAVA语言程序设计12/父类父类Employeeclass Employee int employeeNumbe ; String name, address, pho

6、neNumber ;/子类子类Managerclass Manager extends Employee /子类增加的数据成员 String responsibilities, listOfEmployees;4.1.2 继承的语法继承的语法(续续)例例4_1 类的继承JAVA语言程序设计13l设有三个类:设有三个类:Person, Employee, Manager。其类层次如图:其类层次如图:4.1.2 继承的语法继承的语法(续续)例例4_2 PersonEmployeeManager类的继承JAVA语言程序设计14public class Person public String nam

7、e; 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 getResponsibilities() return responsibilities; 4.1.2 继承的语法

8、继承的语法(续续)例例4_2 类的继承JAVA语言程序设计15public 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 Manager(); he.name = He Xia; he.emplo

9、yeeNumber = 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语言程序设计16l运行结果运行结果Li Ming123456He Xia543469Internet projectl说明说明子类不能直接访问从父类中继承的私有属

10、性及方法,但可使用公有(及保护)方法进行访问4.1.2 继承的语法继承的语法(续续)例例4_2测试结果测试结果 类的继承JAVA语言程序设计17public 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.println(b); /不允许 Sys

11、tem.out.println(getB(); /允许 System.out.println(c); /允许 4.1.2 继承的语法继承的语法(续续)例例4_3 类的继承JAVA语言程序设计184.1.3 隐藏和覆盖隐藏和覆盖l隐藏和覆盖隐藏和覆盖子类对从父类继承来的属性变量及方法可以重新定义类的继承JAVA语言程序设计19l属性的隐藏属性的隐藏子类中声明了与父类中相同的成员变量名,则从父类继承的变量将被隐藏子类拥有了两个相同名字的变量,一个继承自父类,另一个由自己声明当子类执行继承自父类的操作时,处理的是继承自父类的变量,而当子类执行它自己声明的方法时,所操作的就是它自己声明的变量4.1.3

12、 隐藏和覆盖隐藏和覆盖(续续)属性的隐藏属性的隐藏 class Parent Number aNumber;class Child extends Parent Float aNumber;类的继承JAVA语言程序设计20l如何访问被隐藏的父类属性如何访问被隐藏的父类属性调用从父类继承的方法,则操作的是从父类继承的属性使用super.属性4.1.3 隐藏和覆盖隐藏和覆盖(续续)访问被隐藏的父类属性访问被隐藏的父类属性类的继承JAVA语言程序设计21l属性的隐藏举例属性的隐藏举例class A1 int x = 2; public void setx(int i) x = i; void pri

13、nta() 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语言程序设计22public class Exam4_4Test public static void main(String args) A1 a1 = new A1(); a1.setx(4); a1.printa(); B1 b1

14、= new B1(); b1.printb(); b1.printa(); b1.setx(6); / 将继承来的x值设置为6 b1.printb(); b1.printa(); a1.printa(); 4.1.3 隐藏和覆盖隐藏和覆盖(续续)例例4_4测试测试类的继承JAVA语言程序设计23l运行结果运行结果4super.x= 12 x= 10012super.x= 16 x= 1001644.1.3 隐藏和覆盖隐藏和覆盖(续续)例例4_4运行结果运行结果类的继承JAVA语言程序设计24l子类不能继承父类中的静态属性,但可以对父类中子类不能继承父类中的静态属性,但可以对父类中的静态属性进行

15、操作。如在上面的例子中,将的静态属性进行操作。如在上面的例子中,将“int x = 2;”改为改为“static int x = 2;”,再编译及再编译及运行程序,会得到下面的结果运行程序,会得到下面的结果4super.x= 14 x= 10014super.x= 16 x= 1001616l在上面的结果中,第一行及最后一行都是语句在上面的结果中,第一行及最后一行都是语句“a1.printa();”输出的结果,显然类中的输出的结果,显然类中的printb()方法修改的是类中的静态属性方法修改的是类中的静态属性x4.1.3 隐藏和覆盖隐藏和覆盖(续续)例例4_4运行结果运行结果类的继承JAVA语

16、言程序设计25l方法覆盖方法覆盖如果子类不需使用从父类继承来的方法的功能,则可以声明自己的同名方法,称为方法覆盖覆盖方法的返回类型,方法名称,参数的个数及类型必须和被覆盖的方法一摸一样只需在方法名前面使用不同的类名或不同类的对象名即可区分覆盖方法和被覆盖方法覆盖方法的访问权限可以比被覆盖的宽松,但是不能更为严格4.1.3 隐藏和覆盖隐藏和覆盖(续续)方法覆盖方法覆盖 类的继承JAVA语言程序设计26l方法覆盖的应用场合方法覆盖的应用场合子类中实现与父类相同的功能,但采用不同的算法或公式 在名字相同的方法中,要做比父类更多的事情 在子类中需要取消从父类继承的方法4.1.3 隐藏和覆盖隐藏和覆盖(续续)方法覆盖的应用场合方法覆盖的应用场合类的继承JAVA语言程序设计27l必须覆盖的方法必须覆盖的方法派生类必须覆盖基类中的抽象的方法,否则派生类自身也成为抽象类.l不能覆盖的方法不能覆盖的方法基类中声明为final的终结方法基类中声明为static 的静态方法l调用被覆盖的方法调用被覆盖的方法super.overriddenMethodName();4.1.3 隐藏和覆盖隐藏和覆盖(续续)方法

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

当前位置:首页 > IT计算机/网络 > Java

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