龙空技术网

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

CC躺平混吃 100

前言:

而今你们对“java访问权限大小关系”可能比较看重,朋友们都想要剖析一些“java访问权限大小关系”的相关内容。那么小编也在网络上搜集了一些关于“java访问权限大小关系””的相关内容,希望看官们能喜欢,小伙伴们快快来了解一下吧!

4.3.9 基于类的访问权限

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

class Employee {   // ...      private String name;    public boolean equals(Employee other) {        return name.equals(other.name);    }}

下面是一个典型的调用:

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方法。

class Employee{	private final String name;  // .,..}

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

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

private final StringBuilder evaluations;

它在构造器中初始化为

 evaluations = new StringBuilder();

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

evaluations.append("abc");

标签: #java访问权限大小关系