Java : Accessor methods vs protected fields

标签 java oop methods accessor

我知道很多编码人员使用访问器方法来访问一些对其他类来说是私有(private)的类字段,但我想知道为什么。为什么他们不喜欢只能从同一包的类而不是访问器访问的 protected 字段?我的意思是,如果没有严重的原因,那只是代码浪费。

最佳答案

当你只定义访问一个字段的方法时,你会受到方法的限制。你不能做没有方法的事情。

考虑这个类:

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;

此外,protected 实际上更接近 public 而不是 private。如果你有一个私有(private)领域,它将永远是私有(private)的。如果您的领域受到保护,任何人都可以随时扩展您的类(class)并访问该领域。如果它打算是私有(private)的,而你将它设置为 protected ,那么当有人扩展它时它可能会失去它的目的(而且他扩展的事实不再有意义,因为他的新类的行为不符合父类(super class)的精神)。

关于Java : Accessor methods vs protected fields,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36322734/

相关文章:

r - 从 R 中的另一个包为泛型创建新方法

java - 如何在亚马逊S3存储桶中创建新文件夹?

java - 如何在 Java 中使用 POI 合并单元格

java - 通过 Java 函数在只知道其相对路径的浏览器中打开 HTML 文档

c# - 如何处理对象内部的列表对象?

c++ - fatal error LNK1169 : one or more multiply defined symbols found in game programming

java - 错误: Main method not found in class Calculate, 请定义main方法为:public static void main(String[] args)

java - 无法在方法内实例化类?

java - Spring @Configuration 是如何被发现的?

c# - 命名空间内的私有(private)类