第4章java类的重用剖析

上传人:今*** 文档编号:107997724 上传时间:2019-10-22 格式:PPT 页数:126 大小:1.07MB
返回 下载 相关 举报
第4章java类的重用剖析_第1页
第1页 / 共126页
第4章java类的重用剖析_第2页
第2页 / 共126页
第4章java类的重用剖析_第3页
第3页 / 共126页
第4章java类的重用剖析_第4页
第4页 / 共126页
第4章java类的重用剖析_第5页
第5页 / 共126页
点击查看更多>>
资源描述

《第4章java类的重用剖析》由会员分享,可在线阅读,更多相关《第4章java类的重用剖析(126页珍藏版)》请在金锄头文库上搜索。

1、第 4 章 类的重用,2,目录,4.1 类的继承 4.2 Object类 4.3 终结类与终结方法 4.4 抽象类 4.5 泛型 4.6 类的组合 4.7 包的应用 4.8 本章小结,3,4.1 类的继承,类的继承 一种由已有的类创建新类的机制,是面向对象程序设计的基石之一 通过继承,可以根据已有类来定义新类,新类拥有已有类的所有功能 Java只支持类的单继承,每个子类只能有一个直接父类 父类是所有子类的公共属性及方法的集合,子类则是父类的特殊化 继承机制可以提高程序的抽象程度,提高代码的可重用性,4,基类(base class) 也称超类(superclass) 是被直接或间接继承的类 派生

2、类(derived-class) 也称子类 (subclass) 继承其他类而得到的类 继承所有祖先的状态和行为 派生类可以增加变量和方法 派生类也可以覆盖(override)继承的方法,4.1 类的继承,4.1.1 继承的概念 基类和派生类,5,子类对象与父类对象存在“IS A”(或“is a kind of”)的关系,4.1 类的继承,4.1.1 继承的概念 is_a关系,6,动物类层次举例,一般,具体,动物,蛇,蜥蜴,鲸,爬行动物,哺乳动物,狗,巨蜥,壁虎,壁虎,是一种,蜥蜴,爬行,动物是,动物的,一种,4.1 类的继承,4.1.1 继承的概念 图4-1,7,举例,4.1 类的继承,4.

3、1.1 继承的概念 又一个例子,8,4.1.2 继承的语法,继承的语法 class childClassName extends parentClassName /类体 ,4.1 类的继承,9,在一个公司中,有普通员工(Employee)及管理人员(Magager)两类人员 职员对象(Employee)可能有的属性信息包括 员工号(employeeNumber) 姓名(name) 地址(address) 电话号码(phoneNumber) 管理人员(Manager)除具有普通员工的属性外,还可能具有下面的属性 职责(responsibilities) 所管理的职员(listOfEmployee

4、s),4.1 类的继承,4.1.2 继承的语法(续) 例4-1设计公司人员类,10,Employee与Manager的类图,4.1 类的继承,4.1.2 继承的语法(续) 例4-1,11,/父类Employee class Employee int employeeNumber ; String name, address, phoneNumber ; /子类Manager class Manager extends Employee /子类增加的数据成员 String responsibilities, listOfEmployees; ,4.1 类的继承,4.1.2 继承的语法(续) 例4

5、-1 设计公司人员类,12,设有三个类:Person, Employee, Manager。其类层次如图:,4.1.2 继承的语法(续) 例4-2 公有属性及行为的继承,13,public 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 Mana

6、ger extends Employee public String responsibilities; public String getResponsibilities() return responsibilities; ,4.1 类的继承,4.1.2 继承的语法(续) 例4-2,14,public class Tester public static void main(String args) Employee li = new Employee(); li.name = “Li Ming“; li.employeeNumber = 123456; System.out.printl

7、n(li.getName(); System.out.println(li.getEmployeeNumber(); Manager he = new Manager(); 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

8、.1 类的继承,4.1.2 继承的语法(续) 例4-2测试,15,运行结果 Li Ming 123456 He Xia 543469 Internet project,4.1 类的继承,4.1.2 继承的语法(续) 例4-2测试结果,16,子类不能直接访问从父类中继承的私有属性及方法,但可使用公有(及保护)方法进行访问 public 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

9、 d; public void tryVariables() System.out.println(a); /允许 System.out.println(b); /不允许 System.out.println(getB(); /允许 System.out.println(c); /允许 ,4.1 类的继承,4.1.2 继承的语法(续) 例4-3 私有属性及方法的继承,17,4.1.3 隐藏和覆盖,隐藏和覆盖 子类对从父类继承来的属性变量及方法可以重新定义,4.1 类的继承,18,属性的隐藏 子类中声明了与父类中相同的成员变量名,则从父类继承的变量将被隐藏 子类拥有了两个相同名字的变量,一个继承

10、自父类,另一个由自己声明 当子类执行继承自父类的操作时,处理的是继承自父类的变量,而当子类执行它自己声明的方法时,所操作的就是它自己声明的变量,class Parent Number aNumber; ,class Child extends Parent Float aNumber; ,4.1 类的继承,4.1.3 隐藏和覆盖(续) 属性的隐藏,19,如何访问被隐藏的父类属性 调用从父类继承的方法,则操作的是从父类继承的属性 使用super.属性,4.1 类的继承,4.1.3 隐藏和覆盖(续) 访问被隐藏的父类属性,class A1 int x = 2; public void setx(i

11、nt i) x = i; void printa() System.out.println(x); class B1 extends A1 int x=100; void printb() super.x = super.x +10 ; System.out.println(“super.x=“ +super.x + “ x= “ + x); ,运行结果: 4 super.x= 12 x= 100 12 super.x= 16 x= 100 16 4,public class Tester public static void main(String args) A1 a1 = new A1(

12、); a1.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 类的继承,4.1.3 隐藏和覆盖(续) 例4-4属性的隐藏举例,21,子类不能继承父类中的静态属性,但可以对父类中的静态属性进行操作。如在上面的例子中,将“int x = 2;”改为“static int x = 2;”,再编译及运行程序,会得到下面的结果 4 super.x= 14 x= 100 14 super.x

13、= 16 x= 100 16 16 在上面的结果中,第一行及最后一行都是语句“a1.printa();”输出的结果,显然类中的printb()方法修改的是类中的静态属性x,4.1 类的继承,4.1.3 隐藏和覆盖(续) 例4-4操作父类静态属性举例,22,class A int x = 2; public void setx(int i) x = i; void printa() System.out.println(x); class B extends A int x = 100; void printb() super.x = super.x + 10; System.out.print

14、ln(“super.x= “ + super.x + “ x= “ + x); ,运行结果: 4 super.x= 12 x= 100 12 super.x= 16 x= 100 16 4,public class Tester public static void main(String args) A a1 = new A(); a1.setx(4); a1.printa(); B b1 = new B(); b1.printb(); b1.printa(); b1.setx(6); / 将继承来的x值设置为6 b1.printb(); b1.printa(); a1.printa();

15、,4.1 类的继承,4.1.3 隐藏和覆盖(续) 例4-5操作父类静态属性举例,23,方法覆盖 当子类继承了父类,可以在子类中直接使用父类的属性和方法。如果父类的方法无法满足子类的需求,则可以在子类中对父类的方法进行改造,这种情况称为方法的覆盖,也称方法的重写(override)。,4.1 类的继承,4.1.3 隐藏和覆盖(续) 方法覆盖,24,方法覆盖必须遵循的原则 方法签名(即方法名和参数列表)必须完全相同 子类方法的返回值类型可以与父类方法的返回值类型相同,或者是其子类 子类方法的可访问性可以与父类方法的可访问性相同,或是更公开 父类中的private方法不能被重写,否则在其子类中只是新定义了一个新方法,而与父类中的方法无关。,4.1 类的继承,4.1.3 隐藏和覆盖(续) 方法覆盖,25,public class Base public void print() System.out.println(“In Base.“); public static void main(String args) Son obj=new Son(); obj.print(); class Son extends Base public void print() Sys

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

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

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