我一直在努力学习更多关于java中访问修饰符的知识,并且每个人都说“使用私有来隐藏你不想要其他类/方法使用的东西”,我只是想知道为什么需要完成。我想不出一个单独的案例,私人用作唯一的开发者是有意义的......
该问题延伸到也没有提到访问说明符。它似乎只是限制了信息流,因为用户无法看到我们正在生成的代码......
任何有关更好地理解这一点的帮助都将非常受欢迎,因为我倾向于从编程中学习更好。万分感谢!
答案 0 :(得分:3)
我想不出一个单独的案例,私人用作唯一的开发人员......
即使作为唯一的开发人员,您也可能会犯错误,请考虑您在编写后几个月内触摸/使用的代码。 使用正确的访问修饰符有助于封装,构造代码和避免错误(比如意外地改变某些类的内部状态)。
该问题延伸到也没有提到访问说明符。它似乎只是限制了信息流,因为用户无法看到我们正在生成的代码......
我不能完全跟随你,但你总是提到一个访问修饰符,而不是写一个只是默认(包私有)访问。另请注意,代码的用户(如果是库等)将会看到所有成员及其访问修饰符,如果不限制对这些字段的访问,他们可能会尝试访问一些不应直接修改的字段。
答案 1 :(得分:2)
我认为找到示例的一个好方法是转到JDK,找到src.zip文件,然后开始浏览源代码。我相信你会找到很好的引用。它可能比你在这里发布的任何内容都更有意义,而且你会知道它正在世界各地的生产中运行。
这也适用于良好的开源项目(例如Spring)。
阅读其他人的优秀代码是了解设计理念的好方法。
答案 2 :(得分:2)
为什么要隐藏内容的一个简单示例:
class CreditCard {
private int number;
public Boolean setNumber(int nr) {
if(!checkNumber(nr))
return false;
number = nr;
return true;
}
private Boolean checkNumber(int nr) {
...
}
}
答案 3 :(得分:1)
您可以使用私有数据成员,以确保只有您的类也可以访问并且能够修改。您必须想象您的课程被许多其他课程使用。如果数据成员是公共的,那么这些其他类中的任何一个都可以修改它,并且您的类应该期望这样。如果该数据成员的此行为是意外的(不应由任何其他代码更改),请将其设为私有。
例如,假设您的类中有一个数据成员'count',只能在您的类中更新,将其声明为私有,否则会发生这样的事情:
class A
{
public int count;
public A()
{
count = 1;
}
public int divideByCount(int value)
{
return value/count;
}
public incrementCount()
{
count = count + 1;
}
}
// somewhere else
example = new A();
example.count = 0;
example.divideByCount(4); // Divide by zero!
答案 4 :(得分:1)
考虑控制状态的变量。
假设我们有一个班级的州:
bool isDead = false;
bool isAlive = true;
bool canWalk = true;
void Kill() { isDead = true; isAlive = false; canWalk = false; }
void Resurrect() { isDead = false; isAlive = true; canWalk = true; }
现在状态紧密相连,你不希望能够在没有其他状态的情况下改变状态 如果你既死又活,那就没有任何意义。
因此,您希望将变量设为私有,因此您无权更改它们。相反,您将使用改变状态的函数。
答案 5 :(得分:0)
如果您不希望您的成员(例如属性或方法)只能访问当前类,则必须使用private
修饰符。
使用private
修饰符的选择是程序员的任务。
如果程序员不希望其他类无法访问类的成员,因为它可以更改对象的状态(并且程序员不希望对象意外地更改其状态),那么他使用private
。
答案 6 :(得分:0)
即使是唯一的开发人员也会使用IDE和编译器等工具来帮助他们开发。
当您将字段标记为私有时,您说您不希望该字段在其他任何地方使用。随着时间的推移,你可以回到你的代码,你忘了你第一次写它时可能做出的任何假设。如果它是公开的,但你没有这样开发,你可以错误地使用它。将其标记为私有可确保编译器将帮助您稍后做出正确的选择。
当您将某个字段或方法标记为私有且未在任何地方使用时,IDE会立即通知您。如果你公开它,它无法帮助你,你可能会得到许多未使用的代码。这可能是一个问题,如果a)你希望它被使用但它不是,b)当你改变其中一个依赖项时你维护它,但是因为它从未使用过,这是浪费的努力。