第3章 类和对象-2(2008)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。



如果package未指定,则所有的 class都被组合到一 个未命名的缺省package中,不能被其他包中的类 引用 Package语句必须是非注释非空行的第一行
包( package)


创建包就是在当前文件夹下创建一个子 文件夹,以便存放包中包含的所有类 的.class文件。 上面创建的包语句中的符号“.‖代表了目 录分割符,即这个语句创建了两个文件夹。 第一个是当前文件夹下的子文件夹srd ; 第二个是srd下的子文件夹 math ,当前 包中的所有类就存放在这个文件夹中。
定义接口的简单例子
interface DriveControl
package book.ch3; public interface DriveControl { void startEngine(); }
接口的实现


接口中定义的方法需要在具体的类中实 现,这个过程称为接口的实现。 类Car实现了接口DriveControl,必须要 实现接口DriveControl中的所有方法。

利用接口模拟多继承。



只说明对象的编程接口,而不揭示实际的类体。
3.7 包


利用面向对象技术开发系统时,通常需 要定义许多类共同工作,为了更好地管理 这些类,JAVA中引入了包的概念。 象文件夹把各种文件组织在一起一样, JAVA中的包把各种类组织在一起,使得程 序功能清楚,结构分明。

第三章 类和对象-2






1非访问控制符 static、final、abstract 2接口 3包 4继承 5属性隐藏和方法覆盖 6方法重载 7构造方法的继承 8this、super的用法 9组合 10多态
3.4 非访问控制符 static、final、abstract


从包中加载类-import>classpath

Java解释器加载类过程:


import p1.p2.*
将环境变量CLASSPATH包含的一个或多个目录作为 起始目录。 解释器取出包名,将小数点换成斜杠,产生以 CLASSPATH目录为起点的查找路径。 查找目录下的 .class文件 当Java解释器对所生成的二进制字节码文件进行解释 时,如果找不到所需使用的其他.class文件,系统会 自动到CLASSPATH环境变量所指明的路径中去寻找




包:即package,用来管理类文件,防止类的 命名冲突问题;Java中用package语句来创建 包 Java利用包来组织相关的类,并控制访问权限。 包是一种松散的类的集合。一般不要求处于同 一个包中的类有明确的相互关系,如包含、继 承等等。 由于同一包中的类在缺省情况下可以互相访问, 所以为了方便编程和管理,通常把需要在一起 工作的类放在一个包里。
包与目录

一个包要放在指定目录下。classpath 指定搜寻包的路径。 一个包可以包含若干个类文件,还可包含若干包。 包名本身又对应一个目录(用一个目录表示)。
包名可以有层次,以小数点分割。包名一般全小写(类名第一个 字母大写) 。
d1 p1 p2 d2 p3 classpath = d:\d1; d:\d1\d2
包( package)

使用包:使用其他包中的class,需

在引用类之前冠以包名作前缀 用import 语句将此包中的某些或所有class加载入当 前程序: import srd. math. ComplexNumber; import srd. math. *; 每个包对应一个同名的路径,此包中所有class编译 生成的.class文件都在此目录中; 此目录系统不会 自动生成,必须手工创建
package book.ch3; public class Car implements DriveControl { String model; public Car(String model) { this.model = model; } public void startEngine() { System.out.println("Start engine"); }


包( package)

创建 package

package 包名;
每一个class在编译的时候被指定属于某一特定的 package ,用关键字package说明:
package srd . math ; //命名要注意唯一性,可使用WWW 域名 public class ComplexNumber {……}

包与文件系统

包( package)(续)

CLASSPATH环境变量,缺省为当前路径。但 可使用set命令修改 set classpath=.;c:\java\myclasses;

CLASSPATH环境变量:在程序中用import
导入了包,但是到什么地方去找到包呢?必须 通过CLASSPATH指定的位置去找。
使用其他包中的类


import语句将指定包中的类引入当前的程序中, 即告诉编译到哪去找程序中使用的类。 import语句必须出现在所有类定义之前,在 package语句之后。
例:import java.util.* ; 该语句引入整个utility 类库(标准Java库的一部分) 例:import java.util.Vector ; 该语句只引入Vector类,但utility类库中的其他类 不可用。


案例3.3 接口的使用

DriveControl.java Repairable.java Car1.java
接口的应用

声明多个类必须实现的方法。

编程者可以把用于完成特定功能的方法组织成相对 独立的集合体—接口。凡是需要实现这种特定功能 的类,都必须实现这个接口。 java程序中的类层次结构是树状结构,这种树状结 构在处理某些复杂问题时会显得力不从心。 接口在保持单继承优点的前提下,使Java程序的类 层次结构更加合理,更符合实际情况。


public class FinalExample { final int i; final int j; public static final int TOTAL; public FinalExample(int i) { this.i = i; } public static void main(String[] args) { FinalExample example = new FinalExample(1); example.i = 10; example.j = 1; System.out.println("total="+TOTAL); System.out.println("j="+example.j); } }


(1)接口中的方法都是抽象方法即接口不包含方 法的任何实现。接口定义的是实现某一特定功能的 一组方法的对外接口和规范而并没有实现该功能。 接口功能的实现是在实现了该接口的类中完成的。 (2)接口中的方法和域都是public权限。
(3)接口中的成员变量的修饰符都只能用public、 static、final,而且也都隐含着修饰符, 所以修 饰符是不必写的。就是说,接口中的成员变量都 是公用的静态最终变量,即公用的静态常量。 例如:在接口中,下面这行代码: int STEP=5; 等同于:public static final int STEP=5;
实现接口的注意事项


(4)实现接口中的方法时,必须在方法 前用public 修饰符 (5)对接口中的方法实现,实现方法的 方法名、方法返回值、方法的参数列表 必须与接口中的方法定义形式完全一致; 如果不一致,那么就不是一个实现方法 而是一个新定义的重载方法。


interface Instrument { // constant: int i =5 ; // static & final // Cannot have method definitions: void play(); // Automatically public String what(); void adjust(); } class Wind implements Instrument { // public cannot be omitted public void play() { System.out.println("Wind.play()"); } public String what() { return "Wind"; } //注意"adjust(){} "与"adjust();"的区别 public void adjust() {} }

方法1:类名.静态成员名(推荐使用该方式) 方法2:对象名.静态成员名
static控制符的使用

案例3.2—见教材45页(StaticTest.java) 注意上述案例中的类成员与实例成员之 间的不同
final控制符

final修饰一个类,表示这个类不能有子类,即 该类不能被继承 final修饰一个方法,表示这个方法不能在子类 中被覆盖(override) final修饰一个变量,表示该变量只能并且必须 被赋值一次,此后就是只读变量

(4)接口中没有构造方法

总之,接口定义的是某组操作的使用规 范,但是不关心具体实现
接口定义的语法
public interface 接口名 [extends 父接口名列 表] { // 常量域声明 public static final 成员变量类型 成员变量= 常 量值; // 抽象方法声明 public abstract 返回值类型 方法名( 参数列 表); }
abstract控制符



用来修饰一个类或方法 修饰一个类时,说明该类是抽象类,抽 象类不能创建实例 抽象类中的方法可以没有抽象方法;但 是,一个类中如果有抽象方法,那么这 个类一定是抽象类。 abstract class MyClass{ }
3.6 接口


接口:即interface,用来定义一组抽象操作的 集合,通常是一些抽象方法和域的定义,Java 利用接口来实现多重继承,不会改变类的继承 层次结构 接口的特点:
实现接口的注意事项


(1)用implements关键字声明要实现的接口 (2)一个类可以实现多个接口,接口之间用 逗号隔开。如: (3)如果是一个抽象类实现一个接口,那么 可以实现接口中的部分方法;如果是一个非抽 象类实现一个接口,那么必须实现接口中的所 有方法。实现形式表现在必须有方法体和方法 的{}
static:修饰一个类的成员时,该成员称为 类成员。该成员的存在形式是静态的, 无论创建多少个该类的实例,各个实例 都维护一个指向这个静态成员的引用。 静态成员的特点:属于类所有,而不是 属于该类的实例。类的实例访问静态成 员,都是对这同一个内存单元的访问。
static控制符的使用

案例3.1—StaticExample.java 使用static成员的方法
转换为 p1\p2\*.class 或 p1/p2/*.class(取决于操作 系统)
创建包、添加类
package mypk ; public class A{…} package test; import mypk.* ; public class Test { public static void main(String args[]) { A a1 = new A( ) ; …. }
案例3.4 创建包的例子

A.java和 Test.java 注意: A.java和Test.java都放在 d:\ 目录下 Classpath的写法 编译命令的写法 执行命令的写法

Baidu Nhomakorabea
final修饰的变量必须进行赋值,而且赋值只能在构 造方法或变量声明时进行

常常用static和final连用来定义常量: static final int i=20;
final控制符

final的例子—FinalExample.java

找出该程序的错误



相关文档
最新文档