0

在方法声明中使用 public private protected 关键字有什么好处?

我可以想象公共私有受保护关键字对变量的好处,因为它将防止特定类之外的对象进行不必要的“值更改”

但我无法想象将关键字“private”或“public”或“protected”放在方法声明中的好处。

如果有方法,我相信唯一可以使用该方法的对象是包含该方法的对象吗?

4

3 回答 3

3

首先,让我们澄清一下public, protected, package 和privateaccess 的含义。在每种情况下,您都认为对象必须存在才能使用非静态方法是正确的。但是,这些关键字指示允许谁调用对象上的方法:

  • public任何人都可以调用方法。
  • protected方法可以被同一包中的任何类或其他包中的子类调用。
  • 包私有方法(没有任何访问修饰符)只能由同一包中的类调用。
  • private方法只能由同一个类调用。

例如,我经常使用private方法来分解代码,否则这些代码会在几种不同的方法中重复。此代码不是供其他类使用的公共接口的一部分。相反,它是一个“worker”方法,它在类本身内部进行一些计算。

于 2013-02-17T22:44:41.110 回答
2

public表示该方法可以被覆盖,并且可供任何封闭类可见的代码使用。

private表示该方法只能由封闭类使用。

protected意味着该方法只能由封闭类以及扩展该类的任何类调用。

包(方法前没有关键字)意味着该方法可以由与封闭类在同一包中的类中的任何代码调用。

在 Java 中,default、public、protected 和 private 之间的区别

这些不同的关键字在设计如何使用你的类时很有用。 public方法是您向班级用户公开的“合同”的一部分。 private方法通常是不应以任何方式向外界公开的实现代码,因为您希望隐藏该逻辑,以防将来要替换或修改它,而不会破坏与类用户的“合同”。

protected方法可用于扩展您的类的类。因此,也许您希望某些实现可用于覆盖 - 或者您可能需要一个扩展类来实现此方法以使您的类工作,但这不是您向类的调用者公开的“合同”的一部分或那些调用扩展类的人。

用于package创建包中其他类可以调用的实现代码,但您不想向使用您的类的人公开(不是您与用户的“合同”的一部分)。如果需要,我使用包级方法从单元测试中测试一些棘手的实现代码,但不想公开该方法。

于 2013-02-17T22:45:00.663 回答
2

要了解限制对方法的访问的好处,请考虑以下几点:您可以安全地更改甚至private从类中删除方法,因为您知道它只能从该类中访问。如果您正在发布一个 API,并且您公开了一个public方法,那么它就永远存在。如果您尝试更改它,您将破坏依赖它可用的代码。您必须考虑代码将如何随着时间的推移而发展才能充分理解这一点。

如果有方法,我相信唯一可以使用该方法的对象是包含该方法的对象吗?

不,不是真的。方法可以声明为静态的,这意味着它们不需要调用对象。

于 2013-02-17T22:45:44.230 回答