第5章进一步讨论对象和类
第5章 进一步讨论对象和类
本章内容 51抽象数据类型〈2 52对象的构造和初始化 ,看,,,看 3 53this引用 4 54子类 5 55方法重写 6 56Java包 7 57类成员 8 58关键字fnal 面面口 9 59抽象类 10 5.10接口 5.11内部类 12 12过时信息
本章内容 1 5.1 抽象数据类型 2 5.2 对象的构造和初始化 3 5.3 this引用 4 5.4 子类 5 5.5方法重写 6 5.6 Java包 7 5.7 类成员 8 5.8 关键字final 10 5.10 接口 12 5.12 过时信息 9 5.9 抽象类 11 5.11 内部类
抽象数据类型 ■抽象数据类型 抽象数据类型是指基于一个逻辑类型的数 据类型以及这个类型上的一组操作(类) 每一个操作(成员方法)由它的输入、输 出定义。抽象数据类型的定义并不涉及它 的实现细节,这些实现细节对于抽象数据 类型的用户是隐藏的 程序5-1给出了Date类型和 tomorrow操作间 建立的一种联系
抽象数据类型 ▪ 抽象数据类型 抽象数据类型是指基于一个逻辑类型的数 据类型以及这个类型上的一组操作(类)。 每一个操作(成员方法)由它的输入、输 出定义。抽象数据类型的定义并不涉及它 的实现细节,这些实现细节对于抽象数据 类型的用户是隐藏的 ▪ 程序5-1给出了Date类型和tomorrow操作间 建立的一种联系
抽象数据类型 Java在数据和操作间建立了较严格的联系, 即把方法和数据封装在一个类中。在程序 中不是把方法描述为对数据的操作,而是 把数据看作它知道如何修改自己,然后要 求数据对它自己执行操作。 Date d=new Date(20, 11, 1998) d tomorrow( 把方法看做是数据的特性,而不把数据与 方法分开,是0OP的基本思想
抽象数据类型 ▪ Java在数据和操作间建立了较严格的联系, 即把方法和数据封装在一个类中。在程序 中不是把方法描述为对数据的操作,而是 把数据看作它知道如何修改自己,然后要 求数据对它自己执行操作。 Date d=new Date(20,11,1998); d.tomorrow(); ▪ 把方法看做是数据的特性,而不把数据与 方法分开,是OOP的基本思想
定义方法 ■定义抽象数据类型后,需要为这个类型的对象定 义操作,也就是方法。格式如下: 修饰符入返回类型〉名字>(是方法名,它必须使用合法的标识符。 返回类型>说明方法返回值的类型。 〈修饰符>段可以含几个不同的修饰符,其中限定访问 权限的修饰符包括 public, protected和 private 参数列表>是传送给方法的参数表。表中各元素间以 逗号分隔,每个元素由一个类型和一个标识符组成 表示方法体,是要实际执行的代码段
定义方法 ▪ 定义抽象数据类型后,需要为这个类型的对象定 义操作,也就是方法。格式如下: () ▪ 是方法名,它必须使用合法的标识符。 ▪ 说明方法返回值的类型。 ▪ 段可以含几个不同的修饰符,其中限定访问 权限的修饰符包括public,protected和private。 ▪ 是传送给方法的参数表。表中各元素间以 逗号分隔,每个元素由一个类型和一个标识符组成。 ▪ 表示方法体,是要实际执行的代码段
增加方法 ■程序5-2Date类中增加 daysInmontho和 printDate(O 方法 因选定命令提示符 D:\java\program\chapter5\prog5-2>javac Date.java D: \java\program\chapter5\prog5-2>java Date The current date is (dd/mr :1/1/1998 Its tomorrow is (dd mm yy):2/1/1998 The current date is
增加方法 ▪ 程序5-2 Date类中增加daysInMonth()和printDate() 方法
按值传送 ■“按值”传送自变量,即方法调用不会改 变自变量的值 当对象实例作为自变量传送给方法时,自 变量的值是对对象的引用,也就是说,传 送给方法的是引用值。在方法内,这个引 用值是不会被改变的,但可以修改该引用 指向的对象内容。因此,当从方法中退出 时,所修改的对象内容可以保留下来
按值传送 ▪ “按值”传送自变量,即方法调用不会改 变自变量的值 ▪ 当对象实例作为自变量传送给方法时,自 变量的值是对对象的引用,也就是说,传 送给方法的是引用值。在方法内,这个引 用值是不会被改变的,但可以修改该引用 指向的对象内容。因此,当从方法中退出 时,所修改的对象内容可以保留下来
传值实例 程序5-3创建p对象,方法内局部变量val赋初值1l 调用方法 changeInto0后,val的值没有改变。字符 串变量str作为 changeStrl的参数传入方法内,当从 方法中退出后,其内容也没有变化。当对象nt作 命令提示符 为地因 回型的 D: \java \programchapter5>javac PassTest java D: \java \program\chapter5>java PassTest Int value is: 1 Str value is: he llo current ptvalue is:990
传值实例 ▪ 程序5-3 创建pt对象,方法内局部变量val赋初值11。 调用方法changeInt()后,val的值没有改变。字符 串变量str作为changeStr的参数传入方法内,当从 方法中退出后,其内容也没有变化。当对象pt作 为参数传给changeObjValue()后,该引用所保存的 地址不改变,而该地址内保存的内容可以变化, 因此退出方法后,pt对象中的ptValue改变为99f
重载方法名 如果需要在同现在假定需要打印m、0a和 们对不同的变量smig类型的值 重载方法名 public void print(int 一个方法区别于 public void print( float f) public void print( String s) 参数列表及返回 法并调用,包括参岁数及类型 方法的重载允许Ja在同一个类中可以定 义相同的方法名,但需要具有不同的参数 表。不只如此,在不同的类中也可以定义 相同的方法名
重载方法名 ▪ 如果需要在同一个类中写多个方法,让它 们对不同的变量进行同样的操作,就需要 重载方法名 ▪ 一个方法区别于另一个方法的要素:方法名、 参数列表及返回值。根据参数来查找适当的方 法并调用,包括参数的个数及类型 ▪ 方法的重载允许Java 在同一个类中可以定 义相同的方法名,但需要具有不同的参数 表。不只如此,在不同的类中也可以定义 相同的方法名 现在假定需要打印int、float和 String类型的值。 public void print(int i) public void print(float f) public void print(String s)
重载方法两条规则 调用语句的自变量列表必须足够判明要调 用的是哪个方法 自变量的类型可能要进行正常的扩展提升(如 浮点变为双精度),但在有些情况下这会引起 混淆 方法的返回类型可能不同 如果两个同名方法只有返回类型不同,而自变 量列表完全相同则是不够的,因为在方法执行 前不知道能得到什么类型的返回值,因此也就 不能确定要调用的是哪个方法。重载方法的参 数表必须不同,即参数个数或参数类型不同
重载方法两条规则 ▪ 调用语句的自变量列表必须足够判明要调 用的是哪个方法 ▪ 自变量的类型可能要进行正常的扩展提升(如 浮点变为双精度),但在有些情况下这会引起 混淆 ▪ 方法的返回类型可能不同 ▪ 如果两个同名方法只有返回类型不同,而自变 量列表完全相同则是不够的,因为在方法执行 前不知道能得到什么类型的返回值,因此也就 不能确定要调用的是哪个方法。重载方法的参 数表必须不同,即参数个数或参数类型不同