访问权限控制的理解三

1、接口和实现

访问权限的控制常被称为是具体实现的隐藏。把数据和方法包装进类中,以及具体实现的隐藏,常共同被称作是封装。其结果是一个同时带有特征和行为的数据类型。
出于两个很重要的原因,访问权限控制将权限的边界划在了数据类型的内部。第一个原因是要设定客户端程序员可以使用和不可以使用的界限。可以在结构中建立自己的内部机制,而不必担心客户端程序员会偶然的将内部机制当作是他们可以使用的接口的一部分。这个原因直接引出了第二个原因,即将接口和具体实现进行分离。
为了清楚起见,可能会采用一种将public成员置于开头,后面跟着protected、包访问权限和private成员的创建类的形式。javadoc所提供的注释文档功能降低了程序代码的可读性对客户端程序员的重要性。
将接口展现给某个类的使用者实际上是类浏览器的任务。类浏览器是一种以非常有用的方式来查阅所有可用的类,并告诉你用它们可以做些什么(也就是显示出可用成员)的工具。在Java中,用web浏览器浏览JDK文档可以得到使用类浏览器的相同效果。
2、类的访问权限
在Java中,访问权限修饰词也可以用于确定库中的哪些类对于该库的使用者是可用的。如果希望某个类可以为某个客户端程序员所用,就可以通过把关键字public作用于整个类的定义来达到目的。这样做甚至可以控制客户端程序员是否能创建一个该类的对象。
为了控制某个类的访问权限,修饰词必须出现于关键字class之前。
然而,这里还有一些额外的限制:
        1、每个编译单元(文件)都只能有一个public类。这表示,每个编译单元都有单一的公共接口,用public类来实            现。该接口可以按要求包含众多的支持包访问权限的类。如果在某个编译单元内有一个以上的public类,编译器            就会给出出错信息。
        2、public类的名称必须完全与含有该编译单元的文件名相匹配,包括大小写。
        3、虽然不是很常用,但编译单元内完全不带public类也是可能的。在这种情况下,可以随意对文件命名。
在创建一个包访问权限的类时,仍旧是在将该类的域声明为private时才有意义--应尽可能的总是将域指定为私有的,但是通常来说,将与类(包访问权限)相同的访问权限赋予方法也是很合理的。既然一个有包访问权限的类通常只能被用于包内,那么如果对你有强制要求,在此种情况下,编译器会告诉你,你只需要将这样的类的方法设定为public就可以了。
请注意,类既不可以是private的,也不可以是protected的。所以对于类的访问权限,仅有两个选择:包访问权限或public。如果不希望其他任何人对该类拥有访问权限,可以把所有的构造器都指定为private,从而阻止任何人创建该类的对象,但是有一个例外,就是你在该类的static成员内部可以创建。

 

posted @ 2019-09-22 19:50  止水于石  阅读(152)  评论(0)    收藏  举报