私人,受保护,公众和我混淆

时间:2013-02-17 22:41:15

标签: java

在方法声明中使用公共私有保护关键字有什么好处?

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

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

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

3 个答案:

答案 0 :(得分:3)

首先,让我们澄清publicprotected,包和private访问权限的含义。在每种情况下,您都必须存在一个对象才能使用非静态方法。但是,这些关键字表示允许谁在对象上调用该方法:

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

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

答案 1 :(得分:2)

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

private表示该方法仅可由封闭类使用。

protected表示该方法只能由封闭类和扩展该类的任何类调用。

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

In Java, difference between default, public, protected, and private

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

protected方法可用于扩展类的类。所以也许有一些你希望覆盖的实现 - 或者你可能需要一个扩展类来实现这个方法以使你的类工作,但它不是你的暴露给你的类的调用者的“契约”的一部分或那些调用扩展类的人。

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

答案 2 :(得分:2)

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

  

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

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