【教学课件】第四章类的重用.ppt
《【教学课件】第四章类的重用.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第四章类的重用.ppt(125页珍藏版)》请在三一办公上搜索。
1、第四章 类的重用,郑 莉,JAVA语言程序设计,2,目录,4.1 类的继承4.2 Object类 4.3 终结类与终结方法4.4 抽象类4.5 类的组合 4.6 包的应用4.7 本章小结,3,4.1 类的继承,类的继承一种由已有的类创建新类的机制,是面向对象程序设计的基石之一通过继承,可以根据已有类来定义新类,新类拥有已有类的所有功能Java只支持类的单继承,每个子类只能有一个直接父类父类是所有子类的公共属性及方法的集合,子类则是父类的特殊化继承机制可以提高程序的抽象程度,提高代码的可重用性,4,基类(base class)也称超类(superclass)是被直接或间接继承的类派生类(deri
2、ved-class)也称子类(subclass)继承其他类而得到的类继承所有祖先的状态和行为派生类可以增加变量和方法派生类也可以覆盖(override)继承的方法,4.1.1 继承的概念基类和派生类,类的继承,5,子类对象与父类对象存在“IS A”(或“is kind of”)的关系,4.1.1 继承的概念is_a关系,类的继承,6,动物类层次举例,4.1.1 继承的概念图4_1,一般,具体,动物,蛇,蜥蜴,鲸,爬行动物,哺乳动物,狗,巨蜥,壁虎,壁虎,是一种,蜥蜴,爬行,动物是,动物的,一种,类的继承,7,举例,4.1.1 继承的概念又一个例子,类的继承,8,派生类产生的对象从外部来看,它应
3、该包括与基类相同的接口可以具有更多的方法和数据成员其内包含着一个基类类型的子对象,4.1.1 继承的概念派生类对象,9,继承的语法,继承的语法class childClass extends parentClass/类体,类的继承,10,在一个公司中,有普通员工(Employees)及管理人员(Magagers)两类人员职员对象(Employees)可能有的属性信息包括员工号(employeeNumber)姓名(name)地址(address)电话号码(phoneNumber)管理人员(Managers)除具有普通员工的属性外,还可能具有下面的属性职责(responsibilities)所管理
4、的职员(listOfEmployees),4.1.2 继承的语法(续)例4_1,类的继承,11,Employee与Manager的类图,4.1.2 继承的语法(续)例4_1,类的继承,12,/父类Employeeclass Employee int employeeNumbe;String name,address,phoneNumber;/子类Managerclass Manager extends Employee/子类增加的数据成员 String responsibilities,listOfEmployees;,4.1.2 继承的语法(续)例4_1,类的继承,13,设有三个类:Pers
5、on,Employee,Manager。其类层次如图:,4.1.2 继承的语法(续)例4_2,类的继承,14,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 Manager extends Employee public String resp
6、onsibilities;public String getResponsibilities()return responsibilities;,4.1.2 继承的语法(续)例4_2,类的继承,15,public 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
7、();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.1.2 继承的语法(续)例4_2测试,类的继承,16,运行结果Li Ming123456He Xia543469Internet project说明
8、子类不能直接访问从父类中继承的私有属性及方法,但可使用公有(及保护)方法进行访问,4.1.2 继承的语法(续)例4_2测试结果,类的继承,17,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 d;public void tryVariables()System.out.println(a);/允许 System.out.println(b);/不允许 System.out.println
9、(getB();/允许 System.out.println(c);/允许,4.1.2 继承的语法(续)例4_3,类的继承,18,4.1.3 隐藏和覆盖,隐藏和覆盖子类对从父类继承来的属性变量及方法可以重新定义,类的继承,19,属性的隐藏子类中声明了与父类中相同的成员变量名,则从父类继承的变量将被隐藏子类拥有了两个相同名字的变量,一个继承自父类,另一个由自己声明当子类执行继承自父类的操作时,处理的是继承自父类的变量,而当子类执行它自己声明的方法时,所操作的就是它自己声明的变量,4.1.3 隐藏和覆盖(续)属性的隐藏,class Parent Number aNumber;,class Chil
10、d extends Parent Float aNumber;,类的继承,20,如何访问被隐藏的父类属性调用从父类继承的方法,则操作的是从父类继承的属性使用super.属性,4.1.3 隐藏和覆盖(续)访问被隐藏的父类属性,类的继承,21,属性的隐藏举例class A1 int x=2;public void setx(int i)x=i;void printa()System.out.println(x);,4.1.3 隐藏和覆盖(续)例4_4,class B1 extends A1 int x=100;void printb()super.x=super.x+10;System.out.p
11、rintln(super.x=+super.x+x=+x);,类的继承,22,public class Exam4_4Test public static void main(String args)A1 a1=new A1();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.3 隐藏和覆盖(续)例4_4测试,类的继承,23,运行结果4super.x=12 x=10012super.x=16
12、 x=100164,4.1.3 隐藏和覆盖(续)例4_4运行结果,类的继承,24,子类不能继承父类中的静态属性,但可以对父类中的静态属性进行操作。如在上面的例子中,将“int x=2;”改为“static int x=2;”,再编译及运行程序,会得到下面的结果4super.x=14 x=10014super.x=16 x=1001616在上面的结果中,第一行及最后一行都是语句“a1.printa();”输出的结果,显然类中的printb()方法修改的是类中的静态属性x,4.1.3 隐藏和覆盖(续)例4_4运行结果,类的继承,25,方法覆盖如果子类不需使用从父类继承来的方法的功能,则可以声明自己
13、的同名方法,称为方法覆盖覆盖方法的返回类型,方法名称,参数的个数及类型必须和被覆盖的方法一摸一样只需在方法名前面使用不同的类名或不同类的对象名即可区分覆盖方法和被覆盖方法覆盖方法的访问权限可以比被覆盖的宽松,但是不能更为严格,4.1.3 隐藏和覆盖(续)方法覆盖,类的继承,26,方法覆盖的应用场合子类中实现与父类相同的功能,但采用不同的算法或公式 在名字相同的方法中,要做比父类更多的事情 在子类中需要取消从父类继承的方法,4.1.3 隐藏和覆盖(续)方法覆盖的应用场合,类的继承,27,必须覆盖的方法派生类必须覆盖基类中的抽象的方法,否则派生类自身也成为抽象类.不能覆盖的方法基类中声明为fina
14、l的终结方法基类中声明为static 的静态方法调用被覆盖的方法super.overriddenMethodName();,4.1.3 隐藏和覆盖(续)方法覆盖的注意事项,类的继承,28,4.1.4 有继承时的构造方法,有继承时的构造方法遵循以下的原则子类不能从父类继承构造方法好的程序设计方法是在子类的构造方法中调用某一个父类构造方法,调用语句必须出现在子类构造方法的第一行,可使用super关键字如子类构造方法的声明中没有明确调用父类构造方法,则系统在执行子类的构造方法时会自动调用父类的默认构造方法(即无参的构造方法),类的继承,29,public class Person protected
15、 String name,phoneNumber,address;public Person()this(,);public Person(String aName,String aPhoneNumber,String anAddress)name=aName;phoneNumber=aPhoneNumber;address=anAddress;,4.1.4 有继承时的构造方法(续)例4_5,类的继承,30,public class Employee extends Person protected int employeeNumber;protected String workPhoneNu
16、mber;public Employee()/此处隐含调用构造方法 Person()this(0,);public Employee(int aNumber,String aPhoneNumber)/此处隐含调用构造方法 Person()employeeNumber=aNumber;workPhoneNumber=aPhoneNumber;,4.1.4 有继承时的构造方法(续)例4_5,类的继承,31,public class Professor extends Employee protected String research;public Professor()super();resea
17、rch=;public Professor(int aNumber,String aPhoneNumber,String aResearch)super(aNumber,aPhoneNumber);research=aResearch;,4.1.4 有继承时的构造方法(续)例4_5,类的继承,32,在一个公司管理信息系统中,包括普通员工(Employees),其可能有的属性信息包括员工号(employeeNumber)姓名(name)地址(address)电话号码(phoneNumber)管理者(Magagers),除具有普通员工所具有的属性及行为外,还具有下面的属性和行为职责(respons
18、ibilities)所管理的职员(listOfEmployees)工资的计算方法与一般员工不同;福利与一般员工不同顾客(Customers),可能有的属性信息包括姓名(name)地址(address)电话号码(phoneNumber),4.1.5 应用举例例4_6,类的继承,33,类层次结构,4.1.5 应用举例(续)例4_6,类的继承,34,4.2 Object 类,Object类Java程序中所有类的直接或间接父类,类库中所有类的父类,处在类层次最高点包含了所有Java类的公共属性,其构造方法是Object(),35,Object类定义了所有对象必须具有的状态和行为,较主要的方法如下pub
19、lic final Class getClass()获取当前对象所属的类信息,返回Class对象public String toString()返回当前对象本身的有关信息,按字符串对象返回public boolean equals(Objectobj)比较两个对象是否是同一对象,是则返回trueprotected Object clone()生成当前对象的一个拷贝,并返回这个复制对象Public int hashCode()返回该对象的哈希代码值protected void finalize()throws Throwable 定义回收当前对象时所需完成的资源释放工作你的类不可以覆盖终结方法,
20、即有final修饰的方法,4.2 Object类(续)包含的主要方法,Object类,36,相等和同一的概念两个对象具有相同的类型,及相同的属性值,则称二者相等(equal)如果两个引用变量指向的是同一个对象,则称这两个变量(对象)同一(identical)两个对象同一,则肯定相等两个对象相等,不一定同一比较运算符“=”判断的是这两个对象是否同一,4.2 Object类(续)相等和同一,Object类,37,判断两个对象是否同一public class Exam4_7public static void main(String args)BankAccount a=new BankAccoun
21、t(Bob,123456,100.00f);BankAccount b=new BankAccount(Bob,123456,100.00f);if(a=b)System.out.println(YES);else System.out.println(NO);BankAccount类在2.5.1中声明,此程序运行的结果为“NO”,原因是使用等号“=”判断的是两个对象是否同一,显然a和b是两个对象,4.2 Object类(续)例4_7,Object类,38,修改刚才的程序public class Exam4_7public static void main(String args)BankAc
22、count a=new BankAccount(Bob,123456,100.00f);BankAccount b=a;if(a=b)System.out.println(YES);else System.out.println(NO);将a所指对象的引用赋给b,因此a与b指向的是同一个对象,a与b同一。输出结果为“YES”,4.2 Object类(续)例4_7,Object类,39,equals 方法由于Object是类层次结构中的树根节点,因此所有其他类都继承了equals()方法Object类中的 equals()方法的定义如下,可见,也是判断两个对象是否同一public boolean
23、 equals(Object x)return this=x;,4.2 Object类(续)equals方法,Object类,40,Object类中equals方法的使用举例public class EqualsTestpublic static void main(String args)BankAccount a=new BankAccount(Bob,123456,100.00f);BankAccount b=new BankAccount(Bob,123456,100.00f);if(a.equals(b)System.out.println(YES);else System.out.
24、println(NO);由于不是同一对象,运行结果仍然是“NO”,4.2 Object类(续)例4_8,41,equlas方法的重写要判断两个对象各个属性域的值是否相同,则不能使用从Object类继承来的equals方法,而需要在类声明中对equals方法进行重写String类中已经重写了Object类的Equals方法,可以判别两个字符串是否内容相同,4.2 Object类(续)equals方法 的重写,Object类,42,在BankAccount类中增加equals方法,由于是对Object类中的equals方法进行重写,因此方法定义头必须与Object类中的equals方法完全相同,p
25、ublic boolean equals(Object x)if(this.getClass()!=x.getClass()return false;BankAccount b=(BankAccount)x;return(this.getOwnerName().equals(b.getOwnerName(),4.2 Object类(续)equals方法 的重写,Object类,43,equals方法的应用举例public class Apple private String color;private boolean ripe;public Apple(String aColor,boolea
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学课件 教学 课件 第四 重用

链接地址:https://www.31ppt.com/p-5665217.html