收藏 分享(赏)

第五章 对类的进一步讨论.doc

上传人:cjc2202537 文档编号:268967 上传时间:2018-03-25 格式:DOC 页数:5 大小:98.50KB
下载 相关 举报
第五章 对类的进一步讨论.doc_第1页
第1页 / 共5页
第五章 对类的进一步讨论.doc_第2页
第2页 / 共5页
第五章 对类的进一步讨论.doc_第3页
第3页 / 共5页
第五章 对类的进一步讨论.doc_第4页
第4页 / 共5页
第五章 对类的进一步讨论.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

1、第 5 章 对类的进一步讨论5.1 继承继承的思想就是:允许在某个原有类的基础上,通过增添新的方法和成员,以及修改原有类中的方法和成员,来产生一个新的类,以适合新的应用需要。通常,我们将这个原有类称为“父类” (或称为“超类”或“基类” ) ,而这个新类则被称为“子类” 。子类的定义格式为:public class 子类名 extends 父类名 成员及方法声明 一个子类至少不会比父类小子类中的新方法却不能直接访问父类的私有域,而只能通过调用父类的方法得以实现。不能直接对父类的成员进行初始化,但可使用关键字 super 来调用父类的构造方法,以完成对父类中成员的初始化。super 调用必须出现

2、在子类构造方法中的第一行 。一个类可以有多个子类,但一个子类却只能有一个父类。final 类不能被继承。继承可以添加新的域,也可以修改父类的域,但却不能去除父类的域。控制符 protected:类中的域若带有 protected,则在其子类中可直接访问它们。并且,JAVA还允许本包的类访问它们。一个子类构造方法被调用后的内部执行过程如下:(i) 该类的所有成员(不包括父类成员)被初始化为默认值。(ii) 调用父类构造方法。(iii )执行子类的初始化语句。(iv)执行子类构造方法中的代码。5.2 成员的隐藏和方法的重构当子类声明了一个与父类中同名的成员后,这个成员就“隐藏”了父类中的同名成员;

3、当子类声明了一个与父类中同名的方法后,这个方法就“重构” (或“覆盖” )了父类中的同名方法。 当子类“隐藏”了父类中的同名成员后,子类中将不能用该成员名去访问父类的同名成员,但可用该形式来访问之: super.成员名“.成员”将自动沿继承链往上搜索各超类,直到找到或找不到为止.方法的重构:当子类重构了父类中的同名方法后,子类中将不能用该方法名去调用父类的同名方法,但可用以下形式来调用之:super.方法名( )关于方法重构的一些说明:(1)子类中新方法的方法名、参数的个数、类型、对应位置、方法的返回值类型,都必须与被重构方法相一致。(2)子类不能重构父类的 final 和 private 方

4、法。(3)父类的静态方法只能被重构为静态方法;而实例方法也只能被重构为实例方法。(4)子类中新方法的访问权限不能严于被重构方法。方法的动态调用:首先,在当前对象中检查,若有与该方法完全匹配的方法,就调用它;否则,JAVA 将到其父类中去检查,若找到,则调用它;否则,继续沿继承链向上寻找,直到找到(调用之)或找不到(编译出错)为止。5.3 子类对象的使用凡是可以使用父类对象的地方,你都可以使用子类对象。(1)你可以将一个子类对象的引用,赋给其父类对象名。域的访问控制小结:1.只对本类可见.(private)2.对一切类可见.(public)3.对子类及本包类可见.(protected)4.对本包

5、类可见.(缺省符)(2)当方法要求某类(如类 Employee)的对象作为参数时,你可以将其子类(如类Manager)的对象来取代之。当你把子类对象的引用赋给其父类对象名后,你需要注意的是:这个父类对象名所引用的将是该子类对象的实例。一个引用了子类对象的父类对象,其所能发生的行为不会超越父类的范围。但行为的结果可以不同(可能是子类的结果) 。进行对象引用的类型转换时:自动转换只支持子类引用转换成父类引用;反之,必须使用强制转换。在将一个父类引用转换成子类引用时,应该先判断该父类引用原先引用的是否该子类对象。 (安全性检查)运算符“ instanceof ”。其用法的表达式是:对象引用 inst

6、anceof 类5.4 抽象类所谓抽象方法是指:一个只有方法头而无方法体的方法。即,只有访问权限、返回类型、方法名及参数列表,但无方法体。JAVA 规定:一个抽象方法前必须冠以关键字 abstract。构造方法、静态方法、私有方法不能声明为抽象方法。抽象类是指:一个包含抽象方法的类。一个抽象类前必须冠以关键字 abstract。关于抽象类的几点规定:(1)抽象类不允许被实例化。即,不能创建其对象。换句话说,抽象类只能作为父类用于派生子类!(2)当子类继承抽象类时,若没有实现父类中的所有抽象方法,那么,这个子类仍是一个抽象类。(3)子类实现抽象方法时,不能改变其返回类型以及参数列表。(4)允许声

7、明抽象类的对象引用,但它们只能引用其实例化子类的对象。(5)即使不包含抽象方法,一个类仍可以被定义为抽象类(它们不能被实例化) 。抽象类的作用:为其子类刻画一组基本而又通用的行为。或者说,为其子类们的行为制定一个基本框架。5.5 接口与实现接口(interface)是一种特殊的抽象类。它的所有方法都是抽象方法。接口定义的格式如下:public interface 接口名 extends 父接口名 1,父接口名 2, 常量声明和方法声明 规定:(1)接口内的成员都将自动具有 public、static 、final 的性质(即公开的、静态的常量) ,并且这些修饰符都被缺省。接口内的方法则都自动具

8、有 public、abstract 的性质(即公开的、抽象的方法) ,并且这些修饰符也都被缺省。(2)接口不能被实例化。这一点,它与抽象类相同。(3)接口也可以被继承。并且,一个接口可以继承多个父接口(而一个类却只能继承一个父类) 。这是接口区别于抽象类最明显、最主要的一点!接口的实现是指:定义一个接口的子类,来实现该接口中所有的抽象方法。接口实现的格式如下:public class 类名 extends 父类名 implements 接口 1,接口 2, 成员声明和方法声明 说明:(1)实现接口的类可以增加新的成员和方法(2)在类中被实现的方法必须冠以 public(3)接口也不能被实例化,

9、但可以声明接口的引用,来引用其实例化子类的对象 . (4)一个类若没有实现接口中所有抽象方法,那么,该类就是一个抽象类 ,且必须冠以 abstract.5.6 包包是一个比类更大的程序单元。一个包可以包含一组类。包的作用有 2 个:(1)包是一个类的名字空间:一个包中的类不能重名;不同包中的类可以重名便于类的组织和类名的管理。(2)包提供了对类的一种访问机制:带 public 的类可供同一个包中的类使用,也可供其它包中的类使用;而不带 public 的类只能被同一个包中的类使用便于控制对类的访问和使用。存入包:每当你编译一个源文件(.java 文件)之后,所生成的那些“类” (.class 文

10、件) ,都将被“放入”到一个包中:如果你在源文件中声明了包名(使用 package 语句) ,那么,系统就会将这些类“放入”你指定的包(即目录)中;否则它们将被自动放入一个“无名包”(当前目录)中。包的声明格式如下:package 包名;意义:在语法上,为类名指定一个前缀名包名.类名。在逻辑上,将这些类“放入”(即属于) 指定包一个源文件中至多只能有一个 public 的类!注意:逻辑上包与类的包含关系,在物理上必须反映为相应的目录与类文件(.class)的包含关系。否则,编译系统将会认为“类找不到”!然而,JAVA 编译器通常并不会自动生成与包名相对应的目录。这些目录都需要你预先手工去创建。

11、包与类文件的建立步骤:1. 在当前目录下建立子目录 Myclass;2. 在子目录 Myclass 下建立子目录 Myclass1;3. 分别编译 Car.java、Rectangle.java(无论在哪个目录下都可以编译) ,得到类Car.class、Rectangle.class;4. 将类 Car.class 及 Car.java(可以不)存入子目录 Myclass;将类 Rectangle.class 及Rectangle.java(可以不)存入子目录 Myclass1;包的导入:(1)在类名前加包名(2)使用关键字 import 导入包中的某个类 一种较常见的用法。导入包中某个类的语

12、句格式如下:import 包名.类名 ;(3)使用关键字 import 导入指定包中的所有类 一种更常见的用法!导入整个包中所有类的语句格式:import 包名 .* ;(没有 import 包名 . * . *)解释执行类 Program 的步骤(操作演示) :1. 在当前目录下建立子目录 Myclass;并将类 Car.class 存入子目录 Myclass;2. 在子目录 Myclass 下建立子目录 Myclass1;并将类 Rectangle.class 存入子目录Myclass1;3. 在当前目录下编译 Program.java,并可得到 Program.class;4. 在当前目

13、录下解释执行类 Program;一个 JAVA 源程序文件可以包括以下几个部分:(1)一个包声明语句(必须放在第一句!) ;(2)若干个导入语句;(3)类或接口定义语句(至多只能有一个 public 类!) ;5.7 JAVA 类库概述(自己看,老子不高兴弄了)5.8 关于类 ObjectObject,它是所有类的祖先类。每当你定义一个类时,如果没有明确指定继承哪个类,那么,JAVA 就会自动将类 Object作为该类的父类。Object 方法自己看 ppt,老子不高兴弄了第 6 章 数组6.1 一维数组一维数组(简称为数组)是由一组具有相同类型的变量组成的有序集合。数组元素的类型 数组名=n

14、ew 数组元素的类型 元素的个数 ;或者数组元素的类型 数组名 =new 数组元素的类型元素的个数 ;数组被创建后,其中元素的值由系统初始化为默认值。数组的下标可以是变量。说明:(1)数组的长度可以利用表达式“数组名.length”来获得。(2)在创建时,数组的长度必须是常量!()数组一旦被创建,其大小即被固定,无法改变。(4)一旦数组越界,JAVA 将会产生“数组下标越界异常 ”:ArrayIndexOutOfBoundsException。数组的初始化:在创建数组实例时进行元素的初始化说明:(1)使用数组初始化时,被创建的数组的长度由初始化数据的个数确定。(2)用 new 创建数组时不能赋

15、初值(系统将赋于它们默认值) 。6.2 二维数组二维数组的创建格式:类型名 数组名=new 类型名;(类似于行列式,前一个 int 表示行数,后一个 int 表示列数)说明:a.length 的值是数组 a 的长度;ai.length 的值是数组 a 中第 i 行的长度. 6.3 数组作为方法的参数由于数组是被作为对象来处理的,因此,数组名作为方法的参数时,形参数组名引用的就是实参数组实例了。第 7 章 字符串7.1 字符串与类 String字符串对象的类型是类 String方法原形:pulic int length()功能:返回当前字符串对象的长度(字符串中字符的个数) 。方法原形:puli

16、c char charAt(int index)功能:返回当前字符串中下标为 index 的字符。方法原形:pulic boolean equals(Object obj)功能:当且仅当 obj 不为空,并且 obj 引用的字符串与当前字符串有相同类型及内容的字符串时返回 true;否则返回 false。方法原形:pulic boolean compareTo( String str )功能:按词典序比较当前字符串与字符串 str 的大小,返回结果如下:0:相等;0:当前字符串比字符串 str 大;0:当前字符串比字符串 str 小;当你将一个对象(任何对象)同一个字符串相连接时,都可以使用“+”运算符。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 教育学

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报