java中的访问说明符和代码可重用性



访问说明符(如private、public等)如何帮助代码的可重用性?

我在面试时遇到了这个问题,但我找不到答案。请帮帮我。

这里有几条细线,我可以用几种不同的方式回答这个问题。

考虑这样一种情况,即开发人员将几乎所有内容都标记为私有。它可能是一个非常好的类,如果我能扩展它并重写doSomething()方法,它就可以被重用。然而,由于该方法已被标记为私有,我感到束手束脚。这将导致许多开发人员复制&粘贴整个类,更改一个必要的部分。(不酷。)因此可以看出,将所有内容标记为私有会阻止重用。

然而,另一方面,考虑一下开发人员将所有内容标记为公共的情况。该开发人员或其他开发人员开始编写扩展类,或调用所有各种方法/访问可能应该标记为protected/private的属性。发现了一个或类似的设计错误,需要修改类。然而,由于它是如此"开放"地编写的,以前可能是一个简单的修复程序现在要复杂得多,因为所有额外的引用都必须找到并考虑。

我认为最好的选择是妥协。将设计用于客户端代码的东西标记为"public"。将没有业务要扩展/覆盖的内容标记为"私有"。如果有什么东西可以在未来被证明对某人有用,请将其标记为"受保护"。并且总是添加Javadocs来进一步表明您的意图。

要重用的代码需要易于理解和可靠。

可以理解:通过使某些方法私有化,类的作者指定这些方法是内部实现deatil,重新用户只需要考虑公共方法。

可靠:通过将字段设为私有字段,我们可以防止重新用户意外损坏重用代码的内部状态。

假设您很清楚这些访问说明符(如)的范围

仅限私人类

仅限默认包

受保护类和派生类

公共-所有

现在假设您有一个包含方法的类

public int calculate(int x,int y,int z){
z=x+y;
x=z+x;
z=x+y;
return z;
}

这是一个公共方法,可以从任何地方、任何包和任何类访问,无论它是否派生。现在你想在一个新的类中使用这个函数,你可以简单地导入这个类并使用这个方法,而无需反复编写。

这是一个非常简单的例子,你可以在这里用你自己的函数来代替,比如检查序列是否是斐波那契序列,计算简单利息/计算利息等。并在你需要的地方重用它。

假设我有一个实用程序助手类,我希望其他人能够重用它。我在那个类中有很多方法和变量,但使用那个类的人并不需要它们。

  • public标记了可以容易地重复使用的方法。它应该总是有很好的记录,以便有人知道如何以及何时调用它

  • private将成员标记为内部机制的一部分-我的重新用户不需要担心

通过明确允许的访问模型,您可以更清楚地了解应该如何访问代码,从而使其更易于维护,更易于他人重用。

在面试中(我已经雇佣了很多开发人员),你应该能够清楚地解释每个访问修饰符的用途,并能够给出每个修饰符的用法示例。

最新更新