我正在研究StringTokenizer.java
课程,我想到了一些问题。
我注意到其他类使用的公共方法调用了一些完成所有工作的私有方法。现在,我知道OOD的原则之一就是尽可能多地私有化并隐藏所有实现细节。我不确定我是否完全理解这背后的逻辑。
我知道将字段设为私有以防止无效值存储在其中非常重要(只是众多原因之一)。然而,当谈到私人方法时,我不确定它们为何如此重要。
例如,在StringTokenizer
类的情况下,我们不能将所有实现代码放在公共方法中吗?它如何对使用这些方法的类产生影响,因为这些方法的API(即调用这些公共方法的规则)将保持不变?我能想到为什么私有方法有用的唯一原因是它可以帮助你编写重复的代码。例如,如果所有公共方法都做了同样的事情,那么您可以声明一个执行此任务的私有方法,并且可以由公共方法使用。
其他问题,在私有方法中编写实现而不是公共方法有什么好处?
这是一个小例子:
public class Sum{
private int sum(int a, int b){
return a+b;
}
public int getSum(int a, int b){
return sum(a,b);
}
}
Vs的...
public class Sum{
public int getSum(int a, int b){
return a+b;
}
}
第一个样本如何更有益?
答案 0 :(得分:30)
为了添加一些东西,私有方法总是可以安全地更改,因为你肯定知道只能从自己的类调用,没有外部类能够调用私有方法(他们甚至看不到它)。
因此,拥有私有方法总是很好,因为您知道更改它没有任何问题,即使您可以安全地向该方法添加更多参数。
现在想一个公共方法,任何人都可以调用该方法,所以如果你添加/删除一个参数,你还需要改变对该方法的所有调用。
答案 1 :(得分:2)
我能想到为什么私有方法有用的唯一原因是因为它可以帮助你编写重复的代码。
除了合并重复代码(通常表示为“不要重复自己”或“干”)之外,使用私有方法还可以帮助您构建和记录代码。如果您发现自己编写的方法可以执行多项操作,则可以考虑将其拆分为多个私有方法。这样做可以使每个逻辑的输入和输出更清晰(更精细)。此外,描述性方法名称可以帮助补充代码文档。
答案 2 :(得分:1)
当用Java或任何其他面向对象的语言编写干净的代码时,通常最干净最易读的代码包含简洁的方法。通常会出现方法中的逻辑可以在单独的方法调用中更好地表达,以使代码更清晰,更易于维护。
考虑到这一点,我们可以设想您有多种方法可以针对单个目标执行任务。想象一个只有一个复杂目的的课程。该单一目标的切入点可能只需要一个起点(一个公共方法),但许多其他方法都是复杂操作的一部分(许多私人帮助方法)。
使用私有方法,我们可以隐藏逻辑,这些逻辑不是也不应该从类本身之外的任何地方访问。
答案 3 :(得分:1)
公共方法通常是实现该类的其他类将要使用的代码。私有方法在课堂外通常不那么有用,或者不(单独)服务于课程要达到的目的。
假设你在你选择的IDE中,并且你实现了一个类A.A类只设计做一件事,比如文档生成。当然,您将在A类中使用一些数学和字节操作方法来生成文档,但是尝试使用A类的人不需要这些其他方法,因为他们只需要一个文档。因此,我们将这些方法设为私有,以便为我们班级的任何未来用户保持简单。
答案 4 :(得分:1)
声明私有方法的目的是
对您的方法使用private,除非您打算在您的类的上下文之外安全地使用您的方法。
答案 5 :(得分:0)
将函数设为私有可为以下情况提供优势:
答案 6 :(得分:0)
在公共类中使用私有方法的一个优点和好理由是安全性和错误预防。声明为私有的方法只能由它们所属的类访问。这意味着你的私人方法不会被意外地从程序中的其他地方调用,从而减少错误和其他复杂情况。如果您将方法声明为公共方法,则可以通过整个问题进行访问,这可能会导致并发症。
您可能有许多方法可以处理您不希望程序的任何其他部分能够干扰的特定数据。通过私有方法和/或变量使用数据封装有助于防止这种情况,并使代码更易于跟踪和记录。