前言
我还记得第一次面试的时候,就是问 public
、protected
和private
的区别,当时技术很渣,虽然知道是什么意思,但是表述的不是那么清楚,当时搞得自己很紧张,后面的问题也没有回答的很好。。。
访问控制(或隐藏具体实现)与“最初的实现并不恰当”有关
Java 访问权限修饰词
public
使用关键字public
关键字,就意味着public
之后紧跟着的成员声明自己对每个人都是可用的,尤其是使用类库的客户程序员更是如此。
protected
继承访问权限,通过继承可以利用一个现有类~我们将其称为基类,基类的创建者会希望有某个特定成员,把它的访问权限赋予派生类而不是所有类。protected
也提供包访问权限,也就是说,相同包内的其他类也可以访问protected
元素。
private
除了包含该成员的类之外,其他任何类都无法访问这个成员,等于说是隔离了自己。
总结
控制对成员的访问权限与两个方面。第一是为了使用户不要碰触哪些他们不该碰触的地方,这些部分对于类内部的操作是必要的。但是它并不属于客户端程序员所需接口的一部分。因此将方法和域指定成private
对客户端程序而言是一种保护服务。因为这样他们可以很清楚地看到什么对他们重要,什么他们是可以忽略的。这样简化了他们对类的理解。
第二个原因,也是最重要的原因,是为了让类库设计者可以更改类的内部工作方式,而不必担心这样会对客户端程序产生重大的影响。例如,最初可能会以某一种方式创建一个类,然后发现如果更改程序的内部程序结构,可以大大提高运行速度,如果接口和实现可以明确隔离和加以保护,那么就可以实现这一目的,而不必强制客户端程序员重现编写代码。访问权限控制可以确保不会有任何客户端程序员依赖某个类的底层实现的任何部分。