Java:访问器方法与受保护字段

时间:2016-03-31 01:44:33

标签: java oop methods accessor

我知道很多程序员使用访问器方法来访问其他类中私有的类字段,但我想知道为什么。为什么他们不喜欢受保护的字段,只能从同一个包的类而不是访问者访问?我的意思是如果没有严重的原因,那就是代码浪费。

3 个答案:

答案 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修饰符应该用于标记不希望公开访问的变量(或方法),但应该由子类继承和显示。子类可以在其方法中使用此变量和/或如果需要,它可以通过访问器公开它。