欢迎光临散文网 会员登陆 & 注册

java 核心技术-12版 卷Ⅰ- 4.3.9 基于类的访问权限

2023-03-21 21:34 作者:CC挑灯夜读_谷  | 我要投稿

4.3.9 基于类的访问权限

 从前面已经知道,方法可以访问调用这个方法的对象的私有数据。一个类的方法可以访问这个类的所有对象的私有数据,这令很多人感到奇怪。例如,下面来看用来比较两个员工的equals 方法。

    下面是一个典型的调用:

if(harry .equals(boss)) ...

这个方法访问harry的私有字段,这并不让人奇怪,不过,它还访问了boss 的私有字段。这是合法的,其原因是boss 是Employee 类型的对象,而Employee类的方法可以访问任何Employee 类型对象的私有字段。

C++ 注释: C++也有同样的规则。方法可以访问所属类任何对象的私有特性(feature),而不仅限于隐式参数。



4.3.10 私有方法

    实现一个类时,我们会将所有实例字段都设置为私有字段,因为公共数据很危险。不过,方法又应该如何设置呢?尽管大多数方法都是公共的,但在某些情况下,私有方法可能很有用。有时,你可能让希望将一个计算代码分解成若干个独立的辅助方法。通常,这些方法不应该成为公共接口的一部分,这是因为它们往往与当前实现关系非常紧密,或者需要一个特殊协议或调用次序。最好将这样的方法实现为私有方法。

    在Java中,要实现一个私有方法,只需要将关键字public改为private即可。

    如果将一个方法设置为私有,倘若你改变了方法的具体实现,并没有义务保证这个方法依然可用。如果数据的表示发生了变化,那么这个方法可能变得更难实现,或者不再需要;这并不重要。重点在于,只要方法是私有的,类的设计者就可以确信它不会在别处使用,所以可以将其删去。如果一个方法是公共的,就不能简单地将其删除,因为可能会有其他代码依赖这个方法。

    

4.3.11 final实例字段

    可以将实例字段定义为final 。这样的字段必须在构造对象时初始化。也就是说,必须确保在每一个构造器执行之后,这个字段的值已经设置,并且以后不能再修改这个字段。例如,将Employee类中的name字段声明为final,因为在对象构造之后,这个值不会再改变,即没有setName方法。

    

    final 修饰符对于类型为基本类型或者不可变类的字段尤其有用。(如果类中的所有方法都不会改变其对象,这样的类就是不可变类。例如,String 类就是不可变类。)

    对于可变类,使用final修饰符可能会造成混乱。例如,考虑以下字段:

    

    它在构造器中初始化为

final 关键字指示表示存储在 evaluations 变量中的对象引用不会再指向另一个不同的StringBuild对象。不过这个对象可以更改:

    evaluations.append("abc");


java 核心技术-12版 卷Ⅰ- 4.3.9 基于类的访问权限的评论 (共 条)

分享到微博请遵守国家法律