我知道这适用于许多语言,不仅仅是Java,但那是我最熟悉的语言。
我了解修饰符的作用以及如何使用它们。我只是想知道,为什么我们需要它们?为什么不能让每个对象都可以访问,无论它是否需要被访问?
我知道这适用于许多语言,不仅仅是Java,但那是我最熟悉的语言。
我了解修饰符的作用以及如何使用它们。我只是想知道,为什么我们需要它们?为什么不能让每个对象都可以访问,无论它是否需要被访问?
当你需要维护一个更大的项目时,API的访问权限就更加重要了。当一个方法或变量是公共的时,你必须小心修改它,因为你永远不知道代码库中哪些部分依赖于它的确切行为。
但是当一个变量或方法是私有的时,你就知道它不会在类外部被使用。这意味着当你进行修改时,你只需要关注更少的代码内容。
通过将类成员设置为私有和公共,你可以清晰地将外部接口与内部实现分离。外部暴露的内容越少,你对内部实现的自由度就越大。
例如,当你总是将变量设置为私有,并通过getter和setter方法访问它们时,你可以将其从变量改为计算值,然后甚至为了性能原因添加缓存。如果它是一个公共变量,你就必须在使用该变量的所有代码处进行修改。但是,如果你通过getter和setter方法将其暴露给外界,所有其他代码都可以像没有任何变化一样继续使用该类。
访问修饰符用于设置类、变量、方法和构造函数的访问级别。这为个人提供了更好地控制应用程序隐私的机会。有4种访问修饰符。
无修饰符:--|----是----|------是--------|--------否--------|-----否----|
私有的:-------|----是----|-------否--------|--------否--------|-----否----|
公共的:--------|----是的----|------是的--------|-------是的-------|----是的----|
protected:---|----是----|------是--------|-------是-------|-----否-----|
public int maxUsers;
public void setMaxUsers(int users) throws IllegalArgumentException{
if(users > 0 && users <= 1000){
maxUsers = users;
}else{
throw new IllegalArgumentException("The users can not be less than 0 or greater than 1000")"
}
}
http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
为什么你应该这样做:
这与使用意图有关。最好的描述可能是一种设计选择,可以通过代码库来引导使用。通过标记某些内容为私有,您告诉其他开发人员,此字段或方法不应在其当前目的之外使用。在大型项目中,随着时间的推移,它变得非常重要。它有助于传达类的目的和预期用途。
com.sun
命名空间中的包,这会导致问题。升级到新版本的JRE通常会破坏此代码,如果程序员使用正确的javax.crypto
接口和工厂方法而不是在JVM内部探索,则代码将正常工作。解释
私有成员只能在声明它的类中访问。 没有访问修饰符的成员只能在同一包中的类中访问。
或者
如果一个变量在类内被设置为protected,那么它只能通过继承在同一类或不同包中的子类中访问。
受保护的成员可以在同一包中的所有类以及其他包中的子类中访问。
公共成员可被所有类访问(除非它位于不导出所声明包的模块中 这是一个更好的表格版本。(具备模块列,未来兼容)