我知道很多程序员使用访问器方法来访问其他类中私有的类字段,但我想知道为什么。为什么他们不喜欢受保护的字段,只能从同一个包的类而不是访问者访问?我的意思是如果没有严重的原因,那就是代码浪费。
答案 0 :(得分:2)
当您只定义访问字段的方法时,您受到方法的限制。你不能做一些没有方法的东西。
考虑这个课程:
public class Account {
private int balance = 0;
public int getBalance() {
return balance;
}
public void insert(int amount) {
if(amount > 0) {
balance += amount;
}
}
public void withdraw(int amount) {
if(amount > 0 && amount =< balance) {
balance -= amount;
}
}
}
您可以通过插入和撤消来更改帐户的余额,然后您可以检查帐户的内容。但如果你可以直接访问余额,你可以做一些不可能的事情,如:
Account acc = new Account();
acc.balance = -10;
此外,受保护实际上更接近公众而非私人。如果你有一个私人领域,它将永远是私人的。如果您的字段受到保护,任何人都可以随时扩展您的课程并访问该字段。如果它是私有的并且你将它设置为受保护,那么当有人扩展它时它可能会失去它的目的(并且他扩展的事实不再有意义,因为他的新类不符合超类的精神)。
答案 1 :(得分:1)
像getter或setter这样的mutuator方法与protected
变量不同。
您无法控制何时读取或写入受保护变量,如果访问它的人有权访问它,但是mutuator可以作为桥接器来拦截修改或访问底层成员属性并提供返回/设置值的不同行为。所以他们没有达到完全相同的目的。
除了mutuators,您还可以提供对private
成员变量的只读或只写访问权限,但不能使用protected
字段。
答案 2 :(得分:0)
使用accessors / mutators方法是Java编程中常见的最佳实践,与其他语言一样。
Wikipedia建议:
mutator方法最常用于面向对象的编程,符合封装原则。根据这个原则,类的成员变量是私有的,以隐藏和保护它们免受其他代码的攻击,并且只能通过公共成员函数(mutator方法)修改,该函数将所需的新值作为参数,可选地验证它,并修改私有成员变量。
因此,在设置或获取私有变量值之前,使用访问器隐藏应用的逻辑(如果存在)。
protected
修饰符应该用于标记不希望公开访问的变量(或方法),但应该由子类继承和显示。子类可以在其方法中使用此变量和/或如果需要,它可以通过访问器公开它。