隐藏具体实现

在面向对象的设计中,一个最基本的问题是:如何将变动的事物与保持不变的事物区分开来。
程序库的开发者必须有权限对程序库进行修改,并且保证不会影响到客户端的代码。
通过访问权限修饰词来明确指出哪些是可以被客户端程序员使用的,而哪些是不可以的(将方法和字段指定为private对客户端程序员是一种服务)。从最大权限到最小权限依次是:public > protected > 包访问权限(没有关键词时默认) > private

包:程序库单元

包作用:

使用包将构件捆绑到一个内聚的程序库单元。一个包内只有一个public类供外界使用,而其他的类在包外的世界是不可见的,它们主要为public类提供支持。通过import来导入,从而能够使用编好的类。
packageimport关键字允许你做的是将单一的全局名字空间分割开,从而避免名称冲突问题。

包名:域名反转
//Verctor.java(与public类名相同)
package com.example.simple;

public class Vector{
     ......
}

//两种导入方式
import com.example.simple.*;
import com.example.simple.Vector;

Vector v = new Vector();
Vector v = new com.example.simple.Vector();     //导入多个包名出现冲突时,指定具体使用的是哪个
编译.Java文件

当编译.Java文件时,文件中的每个类都会生成一个与类名相同的.class文件,而这些文件全都存放在由package名称分解在计算机上的一个目录(根目录与环境变量CLASSPATH有关)。

解释器工作

当Java程序运行并且需要加载.class文件的时候,Java解释器会先找出环境变量CLASSPATH包含的一个或多个目录,作为查找.class文件的根目录。从根目录开始,解释器获取包的名称并将其的每个聚点换成反斜杠来从CLASSPATH根中产生一个路径名称,然后解释器再在这些目录中查找与你所要创建的类名称相关的.class文件。

使用package注意点

务必记住,无论何时创建包,都已经在给定包的名称的时候隐含地指定目录结构,即包的名称对应目录路径。这个包必须位于其名称所指定的目录之中,而该目录必须在以CLASSPATH开始的目录中可查询到的。在无法找到特定类时有很大可能会是由于这种原因造成。

Java访问权限修饰符

包访问权限(friendly)

如果没有给出关键字,那么默认就是包访问权限。这意味着那个成员对于当前包中的其他类是可见的,而对于包之外的所有类是不可见的。

缺省包

当.Java文件与其他.Java文件处于相同的目录并且没有给自己设定任何包名称,Java将这样的文件自动看作是隶属于该目录的缺省包,于是给了这个.Java文件包访问权限。

public

公开,包内包外都可见

private

仅在该类中可见。
用处:任何一个只是该类的一个“助手”方法的方法,都可以将其指定为private,以确保不会再包内的其他地方误用到它。

protected

如果创建了一个新包,并继承另一个包中的类,那么唯一可以访问的只有源包的public成员。protected的出现就是将某个特定成员声明成protected,来将它的访问权限只赋给派生类,而同一个包中的其它成员也是可以访问protected元素的。

接口与实现

程序库程开发者与客户端程序员。程序库开发者仅把包中的public类给客户端程序员使用创建对象且只能操作public的方法和字段,保证了修改程序库非public成员时而不会破坏客户端的代码。从而确保了接口与具体实现的分离。

类访问权限

类的访问权限只有两种:public和包访问权限。
public权限的类可以在包外加载,而包访问权限的类只能在包内使用。如果不希望任何人对该类拥有访问权限,可以将所有的构造器指定为private,从而阻止任何人创建该类的对象(除非你在该类的static成员内部创建)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值