私有方法基于公共方法

我正在检查这门课,有几个问题浮现在脑海中。StringTokenizer.java

我注意到其他类将使用的公共方法调用了一些完成所有工作的私有方法。现在,我知道OOD的原则之一是尽可能多地私有化并隐藏所有实现细节。我不确定我是否完全理解这背后的逻辑。

我理解将字段设为私有以防止无效值存储在其中非常重要(这只是众多原因之一)。但是,当涉及到私有方法时,我不确定为什么它们同样重要。

例如,在类的情况下,我们难道不能把所有的实现代码都放在公共方法中吗?由于这些方法的API(即调用这些公共方法的规则)将保持不变,因此对这些使用这些方法的类有何影响?我能想到为什么私有方法有用的唯一原因是因为它可以帮助您编写重复的代码。例如,如果所有公共方法都执行相同的操作,则可以声明一个执行此任务且可由公共方法使用的私有方法。StringTokenizer

另一个问题,与公共方法相比,在私有方法中编写实现有什么好处?

下面是一个小示例:

public class Sum{

    private int sum(int a, int b){
        return a+b;
    }

    public int getSum(int a, int b){
        return sum(a,b);
    }
}

与。。。

public class Sum{

    public int getSum(int a, int b){
        return a+b;
    }
}

第一个样本如何更有益?


答案 1

为了添加一些东西,私有方法总是可以安全地更改的,因为您可以确定它仅从自己的类调用,没有外部类能够调用私有方法(它们甚至看不到它)。

因此,拥有私有方法总是好的,因为您知道更改它没有问题,即使您可以安全地向该方法添加更多参数。

现在想想一个公共方法,任何人都可以调用该方法,所以如果你添加/删除一个参数,你还需要改变对该方法的所有调用。


答案 2

我能想到为什么私有方法有用的唯一原因是因为它可以帮助您编写重复的代码。

除了合并重复代码(通常表示为“不要重复自己”或“DRY”)之外,使用私有方法还可以帮助您构建和记录代码。如果你发现自己编写的方法可以做几件事,你可能希望考虑把它分成几个私有方法。这样做可以更清楚地了解每条逻辑的输入和输出是什么(在更精细的粒度上)。此外,描述性方法名称可以帮助补充代码文档。