4

私有、公共等访问说明符如何帮助代码重用?

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

4

4 回答 4

4

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

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

但是,另一方面,请考虑开发人员将所有内容标记为公开的情况。该开发人员或其他开发人员开始编写扩展类,或调用所有各种方法/访问可能应该标记为受保护/私有的属性。发现了设计错误等,需要修改类。但是,由于它写得如此“开放”,因此可能是一个简单的修复现在变得更加复杂,因为必须找到并考虑所有其他参考。

我认为最好的选择是妥协。将设计为供客户端代码使用的事物标记为“公共”。将没有业务扩展/覆盖的事物标记为“私有”。如果有一些东西可以证明对将来某人有用,请将其标记为“受保护”。并始终添加 Javadocs 以进一步表明您的意图。

于 2012-09-21T05:07:34.797 回答
1

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

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

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

于 2012-09-21T05:08:58.847 回答
0

假设您非常了解这些访问说明符的范围,例如

仅限私人课程

仅默认包

保护类和派生类

公开的

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

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

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

这是一个非常简单的示例,您可以在此处替换为您自己的函数,例如检查该系列是否为斐波那契系列,计算单利/复利等,并在您需要的地方重用它。

于 2012-09-21T05:11:17.157 回答
0

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

  • public标记可以轻松重复使用的方法。它应该始终有据可查,以便有人知道如何以及何时调用它。

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

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

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

于 2012-09-21T07:43:38.247 回答