版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、4Java面向对象特性面向对象特性4-2Copyright 山西大学商务学院 2009-2010. All rights reserved.目标目标熟悉类的概念,以及用对象对类进行实例化的概念。熟悉类的概念,以及用对象对类进行实例化的概念。学会如何在学会如何在Java中定义类。中定义类。学会在学会在Java中定义并使用方法(对象的动作)。中定义并使用方法(对象的动作)。学会在学会在Java中创建对象。中创建对象。学习信息隐藏与封装的相关知识。学习信息隐藏与封装的相关知识。了解面向对象的程序设计。了解面向对象的程序设计。4-3Copyright 山西大学商务学院 2009-2010. All r
2、ights reserved.抽象数据类型抽象数据类型绝大多数程序设计语言都预定义了一些基本数据类型,并相应绝大多数程序设计语言都预定义了一些基本数据类型,并相应定义了对那些类型的实例执行的操作。定义了对那些类型的实例执行的操作。4-4Copyright 山西大学商务学院 2009-2010. All rights reserved.概述概述比如,对整型、实型等数值类型,有比如,对整型、实型等数值类型,有加、减、乘、除加、减、乘、除等操作,等操作,对逻辑类型,有对逻辑类型,有逻辑与、逻辑或、逻辑非逻辑与、逻辑或、逻辑非等操作。等操作。对于用户自定义的复合数据类型,需要由程序员自己定义一些对于用
3、户自定义的复合数据类型,需要由程序员自己定义一些方法,对该类型的实例进行所需的操作。方法,对该类型的实例进行所需的操作。4-5Copyright 山西大学商务学院 2009-2010. All rights reserved.抽象数据类型抽象数据类型对象是一种程序构造,有与之相关的数据(信息),并对象是一种程序构造,有与之相关的数据(信息),并可以执行某些动作。程序运行时,对象之间会进行交互可以执行某些动作。程序运行时,对象之间会进行交互,以实现程序设计需要完成的任务。,以实现程序设计需要完成的任务。可以用对象来表示现实世界中的各种对象,比如汽车、可以用对象来表示现实世界中的各种对象,比如汽车
4、、房屋、雇员记录。房屋、雇员记录。类是指一种或一类对象,同一个类的所有对象都具有相类是指一种或一类对象,同一个类的所有对象都具有相同类型的数据和行为。同类型的数据和行为。类和对象是类和对象是Java程序的基本组成要素。程序的基本组成要素。4-6Copyright 山西大学商务学院 2009-2010. All rights reserved.类类 类是现实世界某些对象的共同特征类是现实世界某些对象的共同特征(属性和操作属性和操作)的表示的表示,对象是类的实例。,对象是类的实例。类的属性类的属性:就是类的静态属性的简称,指类内包含的各就是类的静态属性的简称,指类内包含的各项数据,如变量或其他类的
5、对象;项数据,如变量或其他类的对象;类的服务类的服务: 则被称为成员函数或方法。则被称为成员函数或方法。4-7Copyright 山西大学商务学院 2009-2010. All rights reserved.类的基本定义类的基本定义修饰符修饰符 class 类名类名 extends 父类父类 implements 接口名接口名 类成员变量声明类成员变量声明 类方法声明类方法声明 4-8Copyright 山西大学商务学院 2009-2010. All rights reserved.关于类头关于类头-class-class class关键字,在它的后面,应跟随新数据类型的名称。(注关键字,在
6、它的后面,应跟随新数据类型的名称。(注意不要把意不要把class写成写成Class)。)。父类名跟在父类名跟在extends 关键字后面,用来说明当前类是哪个已经关键字后面,用来说明当前类是哪个已经存在类的子类,存在继承关系。继承是类与类之间的一种非存在类的子类,存在继承关系。继承是类与类之间的一种非常重要的关系。常重要的关系。4-9Copyright 山西大学商务学院 2009-2010. All rights reserved.关于类头关于类头-类的修饰符类的修饰符“public”(公共)公共) 意味着后续的定义任何人均可使意味着后续的定义任何人均可使用。用。“private”(私有)私有
7、)意味着除您自己、类型的创建者意味着除您自己、类型的创建者以及那个类型的内部函数成员,其他任何人都不能访问以及那个类型的内部函数成员,其他任何人都不能访问后续的定义信息。后续的定义信息。“protected”(受保护的)受保护的)与与“private”相似,只是一相似,只是一个继承的类可访问受保护的成员,但不能访问私有成员个继承的类可访问受保护的成员,但不能访问私有成员。“friendly”(友好的)友好的)若某样东西是若某样东西是“友好的友好的”,意,意味着它只能在这个包装的范围内使用(所以这一访问级味着它只能在这个包装的范围内使用(所以这一访问级别有时也叫作别有时也叫作“包装访问包装访问”
8、)。)。“4-10Copyright 山西大学商务学院 2009-2010. All rights reserved.关于类头关于类头-接口名接口名接口名跟在接口名跟在implements关键字后面,用来说明当前类中关键字后面,用来说明当前类中实现了哪个接口定义的功能和方法。接口是实现了哪个接口定义的功能和方法。接口是Java语言用语言用来实现多重继承的一种特殊机制,我们将在后面详细介来实现多重继承的一种特殊机制,我们将在后面详细介绍它的使用方法。绍它的使用方法。4-11Copyright 山西大学商务学院 2009-2010. All rights reserved.关于类体关于类体 类体的
9、定义要包括类的具体内容,包括类的属性与方类体的定义要包括类的具体内容,包括类的属性与方法。法。class 4-12Copyright 山西大学商务学院 2009-2010. All rights reserved.关于类体关于类体-类的属性类的属性Java中声明类属性为简单变量的语法如下:中声明类属性为简单变量的语法如下: 修饰符修饰符 变量类型变量类型 变量名变量名 =变量初值变量初值; 变量类型和变量名是声明一个变量必不可少的部分;变量类型和变量名是声明一个变量必不可少的部分;变量的类型是简单数据类型,如变量的类型是简单数据类型,如int、double等。等。4-13Copyright 山
10、西大学商务学院 2009-2010. All rights reserved.Java中声明方法的语法如下:中声明方法的语法如下: 修饰符修饰符 返回值类型返回值类型 方法名方法名(参数列表参数列表)throws 例外名例外名1,例外名,例外名2, 方法体:方法体: 局部变量声明;局部变量声明; 语句序列;语句序列;关于类体关于类体-类的方法类的方法 类中定义的方法通常起到两种作用:一是围绕着类的属性进类中定义的方法通常起到两种作用:一是围绕着类的属性进行各种操作;二是与其他的类或对象进行数据交流、消息传行各种操作;二是与其他的类或对象进行数据交流、消息传递等操作。递等操作。4-14Copyr
11、ight 山西大学商务学院 2009-2010. All rights reserved.关于类体关于类体-类的方法类的方法 Java语言中定义的方法有两类:语言中定义的方法有两类:一类是需要程序书写专门的调用命令来调用的方法,称为程序一类是需要程序书写专门的调用命令来调用的方法,称为程序调用方法,例如调用方法,例如isPfime ();另一类是运行过程中系统自动调用的方法,称为系统方法,例另一类是运行过程中系统自动调用的方法,称为系统方法,例如我们前面程序中的如我们前面程序中的action()、paint()、init()等。这两类方法的等。这两类方法的定义和使用原则有很大差异。定义和使用原
12、则有很大差异。 注意:系统调用方法的最大特点:不需要在程序里书写专注意:系统调用方法的最大特点:不需要在程序里书写专门的调用方法的命令门的调用方法的命令4-15Copyright 山西大学商务学院 2009-2010. All rights reserved.用户程序自定义类用户程序自定义类Java程序员把注意力放在创建称为类的用户自定义程序员把注意力放在创建称为类的用户自定义类型(类型(user-defined type)上,类也称为程序员定上,类也称为程序员定义的类型(义的类型(programmer-defined type),),每个类都每个类都含有数据和一组操作数据的方法,类中的数据部
13、分含有数据和一组操作数据的方法,类中的数据部分称为实例变量。称为实例变量。用户定义类型(即类)的实例称为对象。用户定义类型(即类)的实例称为对象。 下面是一个简单化的下面是一个简单化的Date类。类。4-16Copyright 山西大学商务学院 2009-2010. All rights reserved.示例示例public class Date private int day, month, year;Date ( int i, int j, int k) day = i; month = j;year = k; Date() day = 1; month = 1; year = 1998
14、; Date (Date d) day = d.day; month = d.month; year = d.year;4-17Copyright 山西大学商务学院 2009-2010. All rights reserved.public Date tomorrow() Date d = new Date(this);d.day+;if(d.dayd.daysInMonth()d.day = 1;d.month +;if (d.month 12) d.month = 1;d.year +;return d;daysInMonth() 返回每个月中返回每个月中不同的天数不同的天数4-18Cop
15、yright 山西大学商务学院 2009-2010. All rights reserved.抽象数据类型抽象数据类型在在Java中把名为中把名为tomorrow的代码段叫做方法,也可以的代码段叫做方法,也可以称为成员函数。称为成员函数。Java在数据和操作间建立了较严格的联系,即在数据和操作间建立了较严格的联系,即把方法与把方法与数据封装在一个类中。数据封装在一个类中。4-19Copyright 山西大学商务学院 2009-2010. All rights reserved.抽象数据类型抽象数据类型Data d = new Date ( 20, 11, 1998); /已初始化的已初始化的d
16、ate对象对象d.tomorrow();/tomorrow()方法作用于变量方法作用于变量d要访问要访问Date类的域,可使用点操作符类的域,可使用点操作符“.”:d.day/d所指的所指的Date对象中的对象中的day域域4-20Copyright 山西大学商务学院 2009-2010. All rights reserved.定义方法定义方法 在在Java中,方法定义的一般格式如下:中,方法定义的一般格式如下:()是方法名,它必须使用合法的标识符。是方法名,它必须使用合法的标识符。说明方法返回值的类型。如果方法不返回任说明方法返回值的类型。如果方法不返回任何值,它应该声明为何值,它应该声明
17、为void。Java对待返回值的要求很对待返回值的要求很严格,方法返回值必须与所说明的类型相匹配。严格,方法返回值必须与所说明的类型相匹配。4-21Copyright 山西大学商务学院 2009-2010. All rights reserved.定义方法定义方法段可以含几个不同的修饰符。段可以含几个不同的修饰符。是传送给方法的参数表。表中各元素间以逗是传送给方法的参数表。表中各元素间以逗号分隔,每个元素由一个类型和一个标识符组成。号分隔,每个元素由一个类型和一个标识符组成。表示方法体,是要实际执行的代码段。表示方法体,是要实际执行的代码段。4-22Copyright 山西大学商务学院 200
18、9-2010. All rights reserved.示例示例1 1void setName (String name) = name;String getAddress() return address;4-23Copyright 山西大学商务学院 2009-2010. All rights reserved.按值传送按值传送 JavaJava只只“按值按值”传送自变量,即方法调用不会改变自变量的值传送自变量,即方法调用不会改变自变量的值。当对象实例作为自变量传送给方法时,自变量的值是对对象的当对象实例作为自变量传送给方法时,自变量的值是对对象的引用,也就是说,传送给方
19、法的是引用值。引用,也就是说,传送给方法的是引用值。在方法内,这个引用值是不会被改变的,但可以修改该引用指在方法内,这个引用值是不会被改变的,但可以修改该引用指向的对象内容。当从方法中退出时,所修改的对象内容可以保向的对象内容。当从方法中退出时,所修改的对象内容可以保留下来。留下来。 4-24Copyright 山西大学商务学院 2009-2010. All rights reserved.程序程序3 3public class PassTest float ptValue; public static void main (String args ) String str;int val;
20、PassTest pt = new PassTest ();val = 11; / 给整型量给整型量val赋值赋值 pt.changeInt (val); / 改变改变val的值的值 创建类的创建类的实例实例4-25Copyright 山西大学商务学院 2009-2010. All rights reserved./ val当前的值是什么呢?打印出来看看当前的值是什么呢?打印出来看看 / 给字符串给字符串str赋值赋值str = new String (hello);/ 改变改变str的值的值pt.changeStr (str); / str当前的值是什么呢?打印出来看看当前的值是什么呢?打印
21、出来看看/ 现在给现在给ptValue赋值赋值pt.ptValue = 101f; / 现在通过对象引用改值现在通过对象引用改值pt.changeObjValue (pt);4-26Copyright 山西大学商务学院 2009-2010. All rights reserved./ 当前的值是什么呢?当前的值是什么呢? / 修改当前值的方法修改当前值的方法public void changeInt (int value) value = 55;public void changeStr (String value) value = new String (different); public
22、 void changeObjValue (PassTest ref) ref.ptValue = 99f; 4-27Copyright 山西大学商务学院 2009-2010. All rights reserved.this引用引用 在在Java中,如果在类的成员方法中访问类的成员变量,中,如果在类的成员方法中访问类的成员变量,可以使用关键字可以使用关键字this指明要操作的对象。指明要操作的对象。 4-28Copyright 山西大学商务学院 2009-2010. All rights reserved.示例示例public class Date private int day, mont
23、h, year;public void printDate() this.day + / +this.month + / +this.year);4-29Copyright 山西大学商务学院 2009-2010. All rights reserved.示例示例public class Date private int day, month, year;public void printDate() day + / +month + / +year);4-30Copyright 山西大学商务学院 2009-2010. All rights reserved.数据隐藏数据隐藏 在在Date类中说
24、明类中说明day、month和和year是是private的,这意味着只的,这意味着只能在能在Date类中的方法内访问这些成员,而在类外的方法中不能类中的方法内访问这些成员,而在类外的方法中不能访问它们。访问它们。 4-31Copyright 山西大学商务学院 2009-2010. All rights reserved.例例5-4:public class DateUser public static void main(String args) Date mydate = new Date();mydate.day = 21; 错误错误!4-32Copyright 山西大学商务学院 200
25、9-2010. All rights reserved.示例示例Date d = new Date();d.day = 32;/ 语法正确但语义错误语法正确但语义错误d.month = 2; d.day = 30;/ 没有进行月份的循环检查没有进行月份的循环检查 d.month = d.month +1; 上述赋值语句的结果使得日期对象中的域值成为非法的,或称上述赋值语句的结果使得日期对象中的域值成为非法的,或称为不一致的为不一致的 。4-33Copyright 山西大学商务学院 2009-2010. All rights reserved.说明说明如果类的数据成员没有明确地提供给使用者访问,
26、就是说它不如果类的数据成员没有明确地提供给使用者访问,就是说它不是公有的,则类的使用者必须通过方法来访问成员变量。是公有的,则类的使用者必须通过方法来访问成员变量。4-34Copyright 山西大学商务学院 2009-2010. All rights reserved.示例示例public void setDay(int targetDay) if (targetDay this.daysInMonth() else this.day = targetDay;4-35Copyright 山西大学商务学院 2009-2010. All rights reserved.封装封装 如果对数据的访问
27、是完全放开的,那么,程序会变得混如果对数据的访问是完全放开的,那么,程序会变得混乱且不易控制。乱且不易控制。对于其他复杂的数据类型,类的使用者可能会疏忽对数对于其他复杂的数据类型,类的使用者可能会疏忽对数据的一致性检查。据的一致性检查。4-36Copyright 山西大学商务学院 2009-2010. All rights reserved.封装封装封装是面向对象方法的一个重要原则。封装是面向对象方法的一个重要原则。它有两个基本涵义:一是指对象的全部属性数据和对数它有两个基本涵义:一是指对象的全部属性数据和对数据的全部操作结合在一起,形成一个统一体,也就是对据的全部操作结合在一起,形成一个统一
28、体,也就是对象;另一方面是指,尽可能地隐藏对象的内部细节,只象;另一方面是指,尽可能地隐藏对象的内部细节,只保留有限的对外接口,对数据的操作都通过这些接口实保留有限的对外接口,对数据的操作都通过这些接口实现。现。4-37Copyright 山西大学商务学院 2009-2010. All rights reserved.重载方法名重载方法名如果需要在同一类中写多个方法,让它们对不同的变量如果需要在同一类中写多个方法,让它们对不同的变量进行同样的操作,就需要重载方法名。进行同样的操作,就需要重载方法名。在在JavaJava和其他几种面向对象的程序设计语言中,允许对和其他几种面向对象的程序设计语言中
29、,允许对多个方法使用同一个方法名,这就是方法名的重载。多个方法使用同一个方法名,这就是方法名的重载。当然,前提条件是能够区分实际调用的是哪个方法,才当然,前提条件是能够区分实际调用的是哪个方法,才可用这种方式。可用这种方式。4-38Copyright 山西大学商务学院 2009-2010. All rights reserved.重载方法名重载方法名JavaJava根据参数自变量的类型及参数的个数来区分这些方根据参数自变量的类型及参数的个数来区分这些方法。法。例如:例如:public void print(int i)public void print(int i)public void pr
30、int(float f)public void print(float f)public void print(String s)public void print(String s)当调用当调用print方法时,可根据自变量的类型选中相应的一方法时,可根据自变量的类型选中相应的一个方法。个方法。 4-39Copyright 山西大学商务学院 2009-2010. All rights reserved.重载方法规则一重载方法规则一调用语句的自变量列表必须足够判明要调用的是哪个方调用语句的自变量列表必须足够判明要调用的是哪个方法。自变量的类型可能要进行正常的扩展提升(如浮点法。自变量的类型可能
31、要进行正常的扩展提升(如浮点变为双精度),但在有些情况下这会引起混淆。变为双精度),但在有些情况下这会引起混淆。4-40Copyright 山西大学商务学院 2009-2010. All rights reserved.重载方法规则二重载方法规则二方法的返回类型可能不同。如果两个同名方法只有返回方法的返回类型可能不同。如果两个同名方法只有返回类型不同,而自变量列表完全相同则是不够的,因为在类型不同,而自变量列表完全相同则是不够的,因为在方法执行前不知道能得到什么类型的返回值,因此也就方法执行前不知道能得到什么类型的返回值,因此也就不能确定要调用的是哪个方法。重载方法的参数表必须不能确定要调用的
32、是哪个方法。重载方法的参数表必须不同,即参数个数或参数类型不同。不同,即参数个数或参数类型不同。4-41Copyright 山西大学商务学院 2009-2010. All rights reserved.对象的构造和初始化对象的构造和初始化 在说明了引用后,要调用在说明了引用后,要调用newnew为新对象分配空间。为新对象分配空间。在调用在调用newnew时,既可以带有变量,也可以不带变量。时,既可以带有变量,也可以不带变量。系统根据所带参数的个数和类型,调用相应的构造方法系统根据所带参数的个数和类型,调用相应的构造方法。4-42Copyright 山西大学商务学院 2009-2010. Al
33、l rights reserved.对象的构造和初始化对象的构造和初始化调用构造方法时,步骤如下:调用构造方法时,步骤如下:(1)(1)分配新对象的空间,并进行默认的初始化。在分配新对象的空间,并进行默认的初始化。在JavaJava中,中,这个过程是不可分的,从而可确保不会有没有初值的这个过程是不可分的,从而可确保不会有没有初值的对象。对象。(2)(2)执行显式的成员初始化。执行显式的成员初始化。(3)(3)执行构造方法,构造方法是一个特殊的方法。执行构造方法,构造方法是一个特殊的方法。4-43Copyright 山西大学商务学院 2009-2010. All rights reserved.
34、显式成员初始化显式成员初始化 在成员说明中写有简单的赋值表达式,就可以在构造对在成员说明中写有简单的赋值表达式,就可以在构造对象时进行显式的成员初始化。象时进行显式的成员初始化。 4-44Copyright 山西大学商务学院 2009-2010. All rights reserved.示例示例public class Initialized private int x = 5;private String name = Fred;private Date created = new Date();/ 成员的访问方法成员的访问方法. 4-45Copyright 山西大学商务学院 2009-20
35、10. All rights reserved.构造方法构造方法 显式初始化是为对象域设定初值的一种简单方法。显式初始化是为对象域设定初值的一种简单方法。因为设定的初值不具有变化性,所以这种简单的方法有因为设定的初值不具有变化性,所以这种简单的方法有其局限性。其局限性。系统定义了构造方法,同时允许程序员编写系统定义了构造方法,同时允许程序员编写自己的自己的构造方法完成不同的操作。构造方法完成不同的操作。4-46Copyright 山西大学商务学院 2009-2010. All rights reserved.构造方法构造方法构造方法是特殊的类方法,有着特殊的功能。它的名字构造方法是特殊的类方法
36、,有着特殊的功能。它的名字与类名相同,没有返回值,在创建对象实例时由与类名相同,没有返回值,在创建对象实例时由newnew运运算符自动调用。算符自动调用。为了创建实例的方便,一个类可以有多个具有不同参数为了创建实例的方便,一个类可以有多个具有不同参数列表的构造方法,即构造方法可以重载。列表的构造方法,即构造方法可以重载。4-47Copyright 山西大学商务学院 2009-2010. All rights reserved.示例示例public class Xyz / 成员变量成员变量int x;public Xyz() x = 0;public Xyz(int i) x = i; 使用参数
37、创使用参数创建对象建对象创建对象创建对象4-48Copyright 山西大学商务学院 2009-2010. All rights reserved.构造方法构造方法因为构造方法的特殊性,它因为构造方法的特殊性,它不允许不允许程序员按通常调用方程序员按通常调用方法的方式来调用。法的方式来调用。构造方法不能说明为构造方法不能说明为nativenative,abstractabstract,synchronizedsynchronized或或finalfinal,也,也不能不能从父类继承构造方法。从父类继承构造方法。4-49Copyright 山西大学商务学院 2009-2010. All righ
38、ts reserved.默认构造方法默认构造方法 每个类都每个类都至少有一个至少有一个构造方法。如果程序员没有为类定构造方法。如果程序员没有为类定义构造方法,系统会自动为该类生成一个默认的构造方义构造方法,系统会自动为该类生成一个默认的构造方法。法。默认构造方法的参数列表及方法体均为空。默认构造方法的参数列表及方法体均为空。4-50Copyright 山西大学商务学院 2009-2010. All rights reserved.默认构造方法默认构造方法如果程序员定义了一个或多个构造方法,则自动屏蔽掉如果程序员定义了一个或多个构造方法,则自动屏蔽掉默认构造方法。默认构造方法。构造方法不能继承构
39、造方法不能继承。如果程序员定义了构造方法,那么,最好包含一个参数如果程序员定义了构造方法,那么,最好包含一个参数表为空的构造方法。表为空的构造方法。 4-51Copyright 山西大学商务学院 2009-2010. All rights reserved.finalize方法方法 finalizefinalize方法属于方法属于ObjectObject类,它可被所有类使用。类,它可被所有类使用。如果对象实例不被任何变量引用时,如果对象实例不被任何变量引用时,JavaJava会自动进行会自动进行“垃圾垃圾回收回收”,收回该实例所占用的内存空间。,收回该实例所占用的内存空间。4-52Copyri
40、ght 山西大学商务学院 2009-2010. All rights reserved.finalize方法方法在对对象实例进行垃圾收集之前,在对对象实例进行垃圾收集之前,JavaJava自动调用对象的自动调用对象的finalizefinalize方法,它相当于方法,它相当于C+C+中的析构方法,用来释放对象所中的析构方法,用来释放对象所占用的系统资源。占用的系统资源。4-53Copyright 山西大学商务学院 2009-2010. All rights reserved.finalize方法方法finalizefinalize方法的说明方式如下:方法的说明方式如下:protected vo
41、id finalize () throws Throwable 4-54Copyright 山西大学商务学院 2009-2010. All rights reserved.子类子类 “is a” “is a”关系关系 例例public class Employee private String name;private Date hireDate;private Date dateOfBirth;private String jobTitle;private int grade;.4-55Copyright 山西大学商务学院 2009-2010. All rights reserved.pub
42、lic class Manager private String name;private Date hireDate;private Date dateOfBirth;private String jobTitle;private int grade;private String department;private Employee subordinates;.4-56Copyright 山西大学商务学院 2009-2010. All rights reserved.“is a”关系关系ManagerManager类和类和EmployeeEmployee类之间存在重复部分。实际上,适用于类
43、之间存在重复部分。实际上,适用于EmployeeEmployee的很多方法可能不经修改就会被的很多方法可能不经修改就会被ManagerManager所使用。所使用。Manager与与Employee之间存在之间存在“is a”关系,即关系,即Manager“is a”Employee。4-57Copyright 山西大学商务学院 2009-2010. All rights reserved.extends关键字关键字 面向对象的语言提供了面向对象的语言提供了派生机制派生机制,它允许程序员用以前,它允许程序员用以前已定义的类来定义一个新类。已定义的类来定义一个新类。新类称作新类称作子类子类,原来
44、的类称作,原来的类称作父类父类或或超类超类。两类中公共。两类中公共的内容放到父类中。的内容放到父类中。JavaJava中亦有同样的机制。在中亦有同样的机制。在JavaJava中,用关键字中,用关键字extends表表示派生。示派生。4-58Copyright 山西大学商务学院 2009-2010. All rights reserved.例例5-10: public class Employee private String name;private Date hireDate;private Date dateOfBirth;private String jobTitle;private i
45、nt grade;.public class Manager extends Employee private String department;private Employee subordinates;.4-59Copyright 山西大学商务学院 2009-2010. All rights reserved.extends关键字关键字派生机制改善了程序的可维护性,增加了可靠性。对父类派生机制改善了程序的可维护性,增加了可靠性。对父类EmployeeEmployee所做的修改延伸至子类所做的修改延伸至子类ManagerManager类中,而程序员不需类中,而程序员不需做额外的工作。做额外
46、的工作。 4-60Copyright 山西大学商务学院 2009-2010. All rights reserved.单重继承单重继承 如果一个类有父类,则其如果一个类有父类,则其父类只能有一个父类只能有一个,JavaJava只允许只允许从一个类中扩展类。这条限制叫从一个类中扩展类。这条限制叫单重继承单重继承。为了保留多重继承的功能,为了保留多重继承的功能,JavaJava提出了提出了接口接口的概念。的概念。虽然一个子类可以从父类继承所有的方法和成员变量,虽然一个子类可以从父类继承所有的方法和成员变量,但它但它不能继承构造方法不能继承构造方法。4-61Copyright 山西大学商务学院 20
47、09-2010. All rights reserved.单重继承单重继承只有两种方法可让一个类得到一只有两种方法可让一个类得到一个构造方法,个构造方法,一种方法一种方法是自己编是自己编写一个构造方法,写一个构造方法,另一种方法另一种方法是是,因为用户没有写构造方法,所,因为用户没有写构造方法,所以系统为类提供唯一一个默认的以系统为类提供唯一一个默认的构造方法。构造方法。 4-62Copyright 山西大学商务学院 2009-2010. All rights reserved.多态性多态性 对象是对象是多态多态的,即它们有的,即它们有“许多形式许多形式”。在在JavaJava中,有一个很特殊
48、的类,它是所有类的父类,这中,有一个很特殊的类,它是所有类的父类,这就是类。就是类。 例:例:public class Employee extends Object 4-63Copyright 山西大学商务学院 2009-2010. All rights reserved.方法的参量和异类集合方法的参量和异类集合 1. 1. 方法的参量方法的参量实际中,实例和变量并不总是属于同一类。实际中,实例和变量并不总是属于同一类。例例public TaxRate findTaxRate(Employee e) / 进行计算并返回进行计算并返回e e的税率的税率/ / 而在应用程序类中可以写下面的语句而
49、在应用程序类中可以写下面的语句Manager m = new Manager();TaxRate t = findTaxRate(m);这是合法的,因这是合法的,因为为ManagerManager是一个是一个Employee。4-64Copyright 山西大学商务学院 2009-2010. All rights reserved.2. 2. 异类集合异类集合异类集合异类集合是由不同质内容组成的集合。是由不同质内容组成的集合。在面向对象的语言中,可以创建有公共祖先类的任何元在面向对象的语言中,可以创建有公共祖先类的任何元素的集合。素的集合。4-65Copyright 山西大学商务学院 2009
50、-2010. All rights reserved.instanceof运算符运算符 由于类的多态性,类的变量既可以指向本类实例,又可以指向由于类的多态性,类的变量既可以指向本类实例,又可以指向其子类的实例。其子类的实例。可以通过可以通过instanceof运算符来判明一个引用到底指向哪个实例运算符来判明一个引用到底指向哪个实例 。4-66Copyright 山西大学商务学院 2009-2010. All rights reserved.instanceof运算符运算符假定继承关系如下所示:假定继承关系如下所示:public class Employee extends Objectpubl
51、ic class Employee extends Objectpublic class Manager extends Employeepublic class Manager extends Employeepublic class Contractor extends Employeepublic class Contractor extends Employee4-67Copyright 山西大学商务学院 2009-2010. All rights reserved.instanceof运算符运算符则类之间的层次关系如下图所示则类之间的层次关系如下图所示: :ObjectEmploye
52、eManagerContractor4-68Copyright 山西大学商务学院 2009-2010. All rights reserved.示例示例public void method(Employee e) if (e instanceof Manager) / 经理级人士经理级人士else if (e instanceof Contractor) / 掌握公司机密的高层人士掌握公司机密的高层人士else / 普通雇员普通雇员4-69Copyright 山西大学商务学院 2009-2010. All rights reserved.转换对象转换对象 JavaJava允许使用对象之父类类型
53、的一个变量指示该对象。允许使用对象之父类类型的一个变量指示该对象。下 面 的 语 句 是 合 法 的 :下 面 的 语 句 是 合 法 的 :Employee e = new Manager(); Employee e = new Manager(); 使用变量使用变量e,可以只访问,可以只访问Employee对象的对象的内容,而隐藏内容,而隐藏Manager对象中的特殊内容。对象中的特殊内容。 4-70Copyright 山西大学商务学院 2009-2010. All rights reserved.转换对象转换对象对象引用的赋值兼容原则允许把子类的实例赋给父类的对象引用的赋值兼容原则允许把
54、子类的实例赋给父类的引用,但不能把父类的实例赋给子类的引用。引用,但不能把父类的实例赋给子类的引用。如果用如果用instanceof运算符已判明父类的引用指向的是子运算符已判明父类的引用指向的是子类实例,就可以转换该引用,恢复对象的全部功能。类实例,就可以转换该引用,恢复对象的全部功能。4-71Copyright 山西大学商务学院 2009-2010. All rights reserved.示例示例public void method(Employee e) if (e instanceof Manager) Manager m = (Manager)e;/ 其他操作其他操作4-72Copy
55、right 山西大学商务学院 2009-2010. All rights reserved.转换对象转换对象一般地,要替换对象引用时需做下列检查:一般地,要替换对象引用时需做下列检查:(1) (1) 沿类层次向沿类层次向“上上”转换总是合法的。实际上此种方式下不转换总是合法的。实际上此种方式下不需要转换运算符,只用简单的赋值语句就可完成。需要转换运算符,只用简单的赋值语句就可完成。(2) (2) 对于向对于向“下下”替换,只能是父类到子类转换,其他类之间是替换,只能是父类到子类转换,其他类之间是不允许的。不允许的。(3) 编译器检查正确后,需在运算时检查引用类型编译器检查正确后,需在运算时检查
56、引用类型 4-73Copyright 山西大学商务学院 2009-2010. All rights reserved.覆盖方法覆盖方法 使用类的继承关系,可以从已有的类产生一个新类,修使用类的继承关系,可以从已有的类产生一个新类,修改父类中已有的方法。改父类中已有的方法。如果子类中定义方法所用的名字、返回类型和参数表和如果子类中定义方法所用的名字、返回类型和参数表和父类中方法使用的完全一样,称父类中方法使用的完全一样,称子类方法覆盖了父类中子类方法覆盖了父类中的方法的方法,即子类中的成员方法将隐藏父类中的同名方法,即子类中的成员方法将隐藏父类中的同名方法。4-74Copyright 山西大学商
57、务学院 2009-2010. All rights reserved.覆盖方法覆盖方法利用方法隐藏,可以重定义父类中的方法。利用方法隐藏,可以重定义父类中的方法。覆盖的同名方法中,子类方法不能比父类方法的访问权覆盖的同名方法中,子类方法不能比父类方法的访问权限更严格。限更严格。在子类中,若要使用父类中被隐藏的方法,可以使用在子类中,若要使用父类中被隐藏的方法,可以使用super关键字。关键字。 4-75Copyright 山西大学商务学院 2009-2010. All rights reserved.示例示例class Point void print() public static void
58、 main(String args)Point superp = new Point ();superp.print();Point3d subp = new Point3d();subp.print();class Point3d extends Point void print() 4-76Copyright 山西大学商务学院 2009-2010. All rights reserved.示例示例class Point1 void print() public static void main(String args)Point1 superp = new Point1 ();superp
59、.print();Point3d subp = new Point3d();subp.print();class Point3d extends Point1 void print() super.print(); 4-77Copyright 山西大学商务学院 2009-2010. All rights reserved.示例示例public class Employee String name;int salary; public String getDetails() return Name: +name +“n + Salary: +salary;public class Manager
60、 extends EmployeeString departemnt; public String getDetails() return Name: +name +“n + Manager of +department; 4-78Copyright 山西大学商务学院 2009-2010. All rights reserved.覆盖方法覆盖方法子类中的方法替换或称隐藏了原来的方法。子类中的方法替换或称隐藏了原来的方法。假定说明了如下两个实例:假定说明了如下两个实例: Employee e = new Employee(); Manager m = new Manager();此时,此时,e.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《基于IVIM-DWI与DCE-MRI成像技术对大鼠正常骶髂区影像与病理对比研究》
- 《精神因素与突发性耳聋的相关性及乌灵胶囊对突聋患者的干预性治疗研究》
- 导尿管相关性尿路感染的预防及护理
- 题型六+读后续写+课件+-【知识精研】高考英语二轮复习题型归纳与解题技巧
- 2024至2030年中国葛根营养早餐饼行业投资前景及策略咨询研究报告
- 2024至2030年中国饰面型水性膨胀防火涂料行业投资前景及策略咨询研究报告
- 2024至2030年中国调料盘行业投资前景及策略咨询研究报告
- 2024至2030年中国竹芒制品行业投资前景及策略咨询研究报告
- 2024至2030年中国后座椅总成行业投资前景及策略咨询研究报告
- 2024年中国黑白小电视机市场调查研究报告
- TSG T7008-2023宣贯-杂物电梯
- 浙江杭州市老干部活动中心招考聘用编外聘用人员6人笔试题库含答案解析
- 蹲踞式起跑教学ppt
- 云南省消防条例(2021版)
- 部编版一年级上册语文(比尾巴)课件
- 2023高级机械检查工技能理论考试题库(浓缩500题)
- 应用不变量化简二次曲线的方程
- 泛函分析考试题集与答案
- 校园反恐防暴应急预案
- 房屋加固施工组织设计方案
- 一企一档模板
评论
0/150
提交评论