第5章进一步讨论对象和类
本章内容
抽象数据类型
1
对象的构造和初始化
2
this引用
3
子类
4
5
Java包
6
类成员
7
关键字final
8
接口
10
包装类
12
抽象类
9
内部类
11
过时信息
13
抽象数据类型
抽象数据类型抽象数据类型是指基于一个逻辑类型的数据类型以及这个类型上的一组操作。每一个操作由它的输入、输出定义。抽象数据类型的定义并不涉及它的实现细节,这些实现细节对于抽象数据类型的用户是隐藏的
程序5-1给出了Date类型和tomorrow操作间建立的一种联系
定义方法
定义抽象数据类型后,需要为这个类型的对象定义操作,也就是方法。格式如下:<修饰符><返回类型><名字>(<参数列表>)<块>
<名字>是方法名,它必须使用合法的标识符。
<返回类型>说明方法返回值的类型。
<修饰符>段可以含几个不同的修饰符,其中限定访问权限的修饰符包括public,protected和private。
<参数列表>是传送给方法的参数表。表中各元素间以逗号分隔,每个元素由一个类型和一个标识符组成。
<块>表示方法体,是要实际执行的代码段。
增加方法
程序5-2 Date类中增加daysInMonth()和printDate()方法
按值传送
“按值”传送自变量,即方法调用不会改变自变量的值
当对象实例作为自变量传送给方法时,自变量的值是对对象的引用,也就是说,传送给方法的是引用值。在方法内,这个引用值是不会被改变的,但可以修改该引用指向的对象内容。因此,当从方法中退出时,所修改的对象内容可以保留下来
传值实例
程序5-3 创建pt对象,方法内局部变量val赋初值11。调用方法changeInt()后,val的值没有改变。字符串变量str作为changeStr的参数传入方法内,当从方法中退出后,其内容也没有变化。当对象pt作为参数传给changeObjValue()后,该引用所保存的地址不改变,而该地址内保存的内容可以变化,因此退出方法后,pt对象中的ptValue改变为99f
重载方法名
如果需要在同一个类中写多个方法,让它们对不同的变量进行同样的操作,就需要重载方法名
一个方法区别于另一个方法的要素:方法名、参数列表及返回值。根据参数来查找适当的方法并调用,包括参数的个数及类型
方法的重载允许Java 在同一个类中可以定义相同的方法名,但需要具有不同的参数表。不只如此,在不同的类中也可以定义相同的方法名
现在假定需要打印int、float和String类型的值。
public void print(int i)
public void print(float f)
public void print(String s)
重载方法两条规则
调用语句的自变量列表必须足够判明要调用的是哪个方法
自变量的类型可能要进行正常的扩展提升(如浮点变为双精度),但在有些情况下这会引起混淆
方法的返回类型可能不同
如果两个同名方法只有返回类型不同,而自变量列表完全相同则是不够的,因为在方法执行前不知道能得到什么类型的返回值,因此也就不能确定要调用的是哪个方法。重载方法的参数表必须不同,即参数个数或参数类型不同
对象的构造和初始化
说明了一个引用后,要调用new为新对象分配空间,也就是要调用构造函数
在Java中,使用构造函数(constructor,也称为构造方法)是生成实例对象的唯一方法。在调用new时,既可以带有变量,也可以不带变量,这要视具体的构造方法而定
调用构造方法时步骤如下:
(1) 分配新对象的空间,并进行缺省的初始化。在Java中,这两步是不可分的,从而可确保不会有没有初值的对象。
(2) 执行显式的成员初始化。
(3) 执行构造方法,构造方法是一个特殊的方法。
进一步讨论对象和类 来自淘豆网m.daumloan.com转载请标明出处.