void showTime() { System.out.println(hour+":"+minute+":"+second); } };
17
JAVA语言程序设计
清华大学 郑莉
包(Package)
包是一组类的集合。每个包的名称必 须是“独一无二”的,以防止出现名 称上的冲突。 ? 包的声明
?
– 命名的包(Named Packages)
? 例如:
package Mypackage;
– 缺省包(未命名的包)
? 不含有包声明的编译单元(即:
Java源代码
文件)是缺省包的一部分。
18
JAVA语言程序设计
清华大学 郑莉
包的主要作用
将相关的
源代码文件组织在一起; ? 不同包中的类名可以相同, 从而可以 避免名字冲突; ? 提供包一级的封装及存取权限。
?
19
JAVA语言程序设计
清华大学 郑莉
类的访问控制
?
缺省类(default class )
– 缺省类仅能被同一个包内的其他所有类 访问。
?
公共类(public class)
– 可以被随意地访问
20
JAVA语言程序设计
清华大学 郑莉
类的访问控制
类型
同一包中的类 不同包中的类
无修饰
yes no
public
yes yes
21
JAVA语言程序设计
清华大学 郑莉
类成员的访问控制
? ?
公有(public)
– 允许所有访问。
保护(protected)
– 允许以下的访问:
? ?
同一个包内的访问 其他包中的子类的访问
? ?
私有(private)
– 仅允许所在类成员的访问。
缺省(default)
– 仅允许同一个包内的访问;又被称为“包 (package)访问权限”。
2
2
JAVA语言程序设计
清华大学 郑莉
类成员的访问控制
类型 同一类 同一包中的 子类 同一包中的 非子类 不同包中的 子类 不同包中的 非子类
private yes
无修饰
protected yes
public yes
yes
no
no no no
yes
yes no no
yes
no yes no
yes
yes yes yes
23
JAVA语言程序设计
清华大学 郑莉
静态数据成员(Static Fields)
不管类的对象有多少,静态数据成员 只存在一份。 ? 类初始化的同时就被赋值。 ? 非静态成员又称“实例变量”或“实 例成员” ? 静态成员又称“类变量”或“类成员”
?
24
JAVA语言程序设计
清华大学 郑莉
终结数据成员(Final Fields)
静态和非静态的数据成员都可以被声 明为Final。 ? 静态终结数据成员必须在声明的同时 初始化。 ? 非静态最终数据成员必须在每个构造 函数结束之前赋初值,以保证使用之 前会被初始化。
?
25
JAVA语言程序设计
清华大学 郑莉
静态方法(Static Methods)
声明为静态(static)的方法为类方 法。 ? 类方法可以在不建立对象的情况下用 类直接调用。 ? 静态方法不能被声明为抽象的。
?
26
JAVA语言程序设计
清华大学 郑莉
对象的生成
通过类生成对象 ? 对象是类的实体 ? 声明
?
类名 对象名; 例如: Clock myClock; ? 实例化-生成一个新对象(为它分配空间) myClock= new Clock();
?
初始化
myClock.setTime(8,30,30);
27
JAVA语言程序设计
清华大学 郑莉
使用对象
public class MyApp extends Object { public static void main(String argv[ ]) { Clock myClock=new Clock(); myClock.setTime(8,30,30); myClock.showTime(); } 输出: }
8:30:30
28
JAVA语言程序设计
清华大学 郑莉
方法重载
如果一个类有两个同名的方法,但参 数不同,这种方法就被称为重载。 ? Java可以通过参数列表的不同来辨别 重载的方法。
?
29
JAVA语言程序设计
清华大学 郑莉
例子
import java.util.*; class Tree { int height; void setHeight(int h) { height=h; } void info() { prt("Tree is " + height + " feet tall"); } void info(String s) { prt(s + ": Tree is " + height + " feet tall"); } static void prt(String s) { System.out.println(s); } }
30