第4章 类的重用.ppt
《第4章 类的重用.ppt》由会员分享,可在线阅读,更多相关《第4章 类的重用.ppt(126页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Java语言程序设计(第2版)第 4 章 类的重用郑 莉Java语言程序设计(第2版),郑莉,清华大学2目录4.1 类的继承4.2 Object类 4.3 终结类与终结方法4.4 抽象类4.5 泛型4.6 类的组合 4.7 包的应用4.8 本章小结Java语言程序设计(第2版),郑莉,清华大学34.1 类的继承类的继承一种由已有的类创建新类的机制,是面向对象程序设计的基石之一通过继承,可以根据已有类来定义新类,新类拥有已有类的所有功能Java只支持类的单继承,每个子类只能有一个直接父类父类是所有子类的公共属性及方法的集合,子类则是父类的特殊化继承机制可以提高程序的抽象程度,提高代码的可重用性J
2、ava语言程序设计(第2版),郑莉,清华大学4基类(base class)也称超类(superclass)是被直接或间接继承的类派生类(derived-class)也称子类(subclass)继承其他类而得到的类继承所有祖先的状态和行为派生类可以增加变量和方法派生类也可以覆盖(override)继承的方法4.1 类的继承4.1.1 继承的概念基类和派生类Java语言程序设计(第2版),郑莉,清华大学5子类对象与父类对象存在“IS A”(或“is a kind of”)的关系4.1 类的继承4.1.1 继承的概念is_a关系Java语言程序设计(第2版),郑莉,清华大学6动物类层次举例一般具体动
3、物蛇蜥蜴鲸爬行动物哺乳动物狗巨蜥 壁虎壁虎 是一种 蜥蜴 爬行动物是 动物的 一种4.1 类的继承4.1.1 继承的概念图4-1Java语言程序设计(第2版),郑莉,清华大学7举例4.1 类的继承4.1.1 继承的概念又一个例子Java语言程序设计(第2版),郑莉,清华大学8派生类产生的对象从外部来看,它应该包括与基类相同的接口可以具有更多的方法和数据成员其内包含着一个基类类型的子对象4.1 类的继承4.1.1 继承的概念派生类对象Java语言程序设计(第2版),郑莉,清华大学94.1.2 继承的语法继承的语法class childClass extends parentClass/类体类的继
4、承4.1 类的继承Java语言程序设计(第2版),郑莉,清华大学10在一个公司中,有普通员工(Employees)及管理人员(Magagers)两类人员职员对象(Employees)可能有的属性信息包括员工号(employeeNumber)姓名(name)地址(address)电话号码(phoneNumber)管理人员(Managers)除具有普通员工的属性外,还可能具有下面的属性职责(responsibilities)所管理的职员(listOfEmployees)4.1 类的继承4.1.2 继承的语法(续)例4-1Java语言程序设计(第2版),郑莉,清华大学11Employee与Manag
5、er的类图EmployeeemployeeNumbe:intname:Stringaddress:StringphoneNumber:StringManagerresponsibilities:StringlistOfEmployees:String4.1 类的继承4.1.2 继承的语法(续)例4-1Java语言程序设计(第2版),郑莉,清华大学12/父类Employeeclass Employee int employeeNumbe;String name,address,phoneNumber;/子类Managerclass Manager extends Employee /子类增加的数
6、据成员 String responsibilities,listOfEmployees;4.1 类的继承4.1.2 继承的语法(续)例4-1Java语言程序设计(第2版),郑莉,清华大学13设有三个类:Person,Employee,Manager。其类层次如图:PersonEmployeeManager4.1.2 继承的语法(续)例4-2Java语言程序设计(第2版),郑莉,清华大学14public class Person public String name;public String getName()return name;public class Employee extends
7、Person public int employeeNumber;public int getEmployeeNumber()return employeeNumber;public class Manager extends Employee public String responsibilities;public String getResponsibilities()return responsibilities;4.1 类的继承4.1.2 继承的语法(续)例4-2Java语言程序设计(第2版),郑莉,清华大学15public class Exam4_2Test public stat
8、ic 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.employeeNumber=543469;he.responsibilities=Internet project;System.out.println(he.getName()
9、;System.out.println(he.getEmployeeNumber();System.out.println(he.getResponsibilities();4.1 类的继承4.1.2 继承的语法(续)例4-2测试Java语言程序设计(第2版),郑莉,清华大学16运行结果Li Ming123456He Xia543469Internet project4.1 类的继承4.1.2 继承的语法(续)例4-2测试结果Java语言程序设计(第2版),郑莉,清华大学17子类不能直接访问从父类中继承的私有属性及方法,但可使用公有(及保护)方法进行访问public class B publi
10、c 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(getB();/允许 System.out.println(c);/允许 4.1 类的继承4.1.2 继承的语法(续)例4-3Java语言程序设计(第2版),郑莉,清华大学184.1
11、.3 隐藏和覆盖隐藏和覆盖子类对从父类继承来的属性变量及方法可以重新定义4.1 类的继承Java语言程序设计(第2版),郑莉,清华大学19属性的隐藏子类中声明了与父类中相同的成员变量名,则从父类继承的变量将被隐藏子类拥有了两个相同名字的变量,一个继承自父类,另一个由自己声明当子类执行继承自父类的操作时,处理的是继承自父类的变量,而当子类执行它自己声明的方法时,所操作的就是它自己声明的变量class Parent Number aNumber;class Child extends Parent Float aNumber;4.1 类的继承4.1.3 隐藏和覆盖(续)属性的隐藏Java语言程序设
12、计(第2版),郑莉,清华大学20如何访问被隐藏的父类属性调用从父类继承的方法,则操作的是从父类继承的属性使用super.属性4.1 类的继承4.1.3 隐藏和覆盖(续)访问被隐藏的父类属性Java语言程序设计(第2版),郑莉,清华大学21class A1 int x=2;public void setx(int 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
13、);运行结果:4super.x=12 x=10012super.x=16 x=100164public 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 类的继承4.1.3 隐藏和覆盖(续)例4-4属性的隐藏举例Java语言程序设计(第2版),郑莉,清华大学22子
14、类不能继承父类中的静态属性,但可以对父类中的静态属性进行操作。如在上面的例子中,将“int x=2;”改为“static int x=2;”,再编译及运行程序,会得到下面的结果4super.x=14 x=10014super.x=16 x=1001616在上面的结果中,第一行及最后一行都是语句“a1.printa();”输出的结果,显然类中的printb()方法修改的是类中的静态属性x4.1 类的继承4.1.3 隐藏和覆盖(续)例4-4操作父类静态属性举例Java语言程序设计(第2版),郑莉,清华大学24方法覆盖如果子类不需使用从父类继承来的方法的功能,则可以声明自己的同名方法,称为方法覆盖覆
15、盖方法的返回类型,方法名称,参数的个数及类型必须和被覆盖的方法一摸一样只需在方法名前面使用不同的类名或不同类的对象名即可区分覆盖方法和被覆盖方法覆盖方法的访问权限可以比被覆盖的宽松,但是不能更为严格4.1 类的继承4.1.3 隐藏和覆盖(续)方法覆盖Java语言程序设计(第2版),郑莉,清华大学25方法覆盖的应用场合子类中实现与父类相同的功能,但采用不同的算法或公式 在名字相同的方法中,要做比父类更多的事情 在子类中需要取消从父类继承的方法4.1 类的继承4.1.3 隐藏和覆盖(续)方法覆盖的应用场合Java语言程序设计(第2版),郑莉,清华大学26必须覆盖的方法派生类必须覆盖基类中的抽象的方
16、法,否则派生类自身也成为抽象类.不能覆盖的方法基类中声明为final的终结方法基类中声明为static 的静态方法调用被覆盖的方法super.overriddenMethodName();4.1 类的继承4.1.3 隐藏和覆盖(续)方法覆盖的注意事项Java语言程序设计(第2版),郑莉,清华大学274.1.4 有继承时的构造方法有继承时的构造方法遵循以下的原则子类不能从父类继承构造方法好的程序设计方法是在子类的构造方法中调用某一个父类构造方法,调用语句必须出现在子类构造方法的第一行,可使用super关键字如子类构造方法的声明中没有明确调用父类构造方法,则系统在执行子类的构造方法时会自动调用父类
17、的默认构造方法(即无参的构造方法)4.1 类的继承Java语言程序设计(第2版),郑莉,清华大学28public class Person protected String name,phoneNumber,address;public Person()this(,);public Person(String aName,String aPhoneNumber,String anAddress)name=aName;phoneNumber=aPhoneNumber;address=anAddress;4.1 类的继承4.1.4 有继承时的构造方法(续)例4-6Java语言程序设计(第2版),郑
18、莉,清华大学29public class Employee extends Person protected int employeeNumber;protected String workPhoneNumber;public Employee()/此处隐含调用构造方法 Person()this(0,);public Employee(int aNumber,String aPhoneNumber)/此处隐含调用构造方法 Person()employeeNumber=aNumber;workPhoneNumber=aPhoneNumber;4.1 类的继承4.1.4 有继承时的构造方法(续)例
19、4-6Java语言程序设计(第2版),郑莉,清华大学30public class Professor extends Employee protected String research;public Professor()super();research=;public Professor(int aNumber,String aPhoneNumber,String aResearch)super(aNumber,aPhoneNumber);research=aResearch;4.1 类的继承4.1.4 有继承时的构造方法(续)例4-6Java语言程序设计(第2版),郑莉,清华大学31在一
20、个公司管理信息系统中,包括普通员工(Employees),其可能有的属性信息包括员工号(employeeNumber)姓名(name)地址(address)电话号码(phoneNumber)管理者(Magagers),除具有普通员工所具有的属性及行为外,还具有下面的属性和行为职责(responsibilities)所管理的职员(listOfEmployees)工资的计算方法与一般员工不同;福利与一般员工不同顾客(Customers),可能有的属性信息包括姓名(name)地址(address)电话号码(phoneNumber)4.1 类的继承4.1.5 继承举例例4-7Java语言程序设计(第2
21、版),郑莉,清华大学32类层次结构PersonEmployeeManagerCustomer4.1 类的继承4.1.5 继承举例(续)例4-7Java语言程序设计(第2版),郑莉,清华大学334.2 Object 类Object类Java程序中所有类的直接或间接父类,类库中所有类的父类,处在类层次最高点包含了所有Java类的公共属性,其构造方法是Object()Java语言程序设计(第2版),郑莉,清华大学34Object类定义了所有对象必须具有的状态和行为,较主要的方法如下public final Class getClass()获取当前对象所属的类信息,返回Class对象public St
22、ring toString()返回当前对象本身的有关信息,按字符串对象返回public boolean equals(Objectobj)比较两个对象是否是同一对象,是则返回trueprotected Object clone()生成当前对象的一个拷贝,并返回这个复制对象Public int hashCode()返回该对象的哈希代码值protected void finalize()throws Throwable 定义回收当前对象时所需完成的资源释放工作你的类不可以覆盖终结方法,即有final修饰的方法4.2 Object类4.2 Object类(续)包含的主要方法Java语言程序设计(第2
23、版),郑莉,清华大学35相等和同一的概念两个对象具有相同的类型,及相同的属性值,则称二者相等(equal)如果两个引用变量指向的是同一个对象,则称这两个变量(对象)同一(identical)两个对象同一,则肯定相等两个对象相等,不一定同一比较运算符“=”判断的是这两个对象是否同一4.2 Object类4.2 Object类(续)相等和同一Java语言程序设计(第2版),郑莉,清华大学36判断两个对象是否同一public class Tester public static void main(String args)BankAccount a=new BankAccount(Bob,12345
24、6,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.2 Object类(续)例4-8Java语言程序设计(第2版),郑莉,清华大学37修改刚才的程序public class Tester1 public static void main(Strin
25、g args)BankAccount a=new BankAccount(Bob,123456,100.00f,Grade.General);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.2 Object类(续)例4-8Java语言程序设计(第2版),郑莉,清华大学38equals 方法由于Object是类层次结构中的树根节点,因此所有其他类都继承了equals()方法Objec
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第4章 类的重用 重用
限制150内