【发布时间】:2013-02-02 07:56:27
【问题描述】:
在方法声明中使用 public private protected 关键字有什么好处?
我可以想象 public private protected 关键字对变量的好处,因为它可以防止特定类之外的对象进行不必要的“值更改”
但我无法想象将关键字“private”或“public”或“protected”放在方法声明中的好处。
如果有方法,我相信唯一可以使用该方法的对象是包含该方法的对象吗?
【问题讨论】:
标签: java
在方法声明中使用 public private protected 关键字有什么好处?
我可以想象 public private protected 关键字对变量的好处,因为它可以防止特定类之外的对象进行不必要的“值更改”
但我无法想象将关键字“private”或“public”或“protected”放在方法声明中的好处。
如果有方法,我相信唯一可以使用该方法的对象是包含该方法的对象吗?
【问题讨论】:
标签: java
首先,我们来明确一下public、protected、package、private访问的含义。在每种情况下,您都认为对象必须存在才能使用非静态方法是正确的。但是,这些关键字表示允许谁调用对象上的方法:
public 方法可以被任何人调用。protected 方法可以被同一包中的任何类或其他包中的子类调用。private 方法只能由同一个类调用。例如,我经常使用private 方法来分解代码,否则这些代码会在几种不同的方法中重复。此代码不是供其他类使用的公共接口的一部分。相反,它是一个“worker”方法,它在类本身内部执行一些计算。
【讨论】:
public 表示该方法可以被覆盖,并且可供任何封闭类可见的代码使用。
private 表示该方法只能由封闭类使用。
protected 表示该方法只能由封闭类以及扩展该类的任何类调用。
package(方法前没有关键字)表示该方法可以被与封闭类在同一个包中的类中的任何代码调用。
In Java, difference between default, public, protected, and private
这些不同的关键字在设计如何使用你的类时很有用。 public 方法是您向班级用户公开的“合同”的一部分。 private 方法通常是实现代码,不应以任何方式向外界公开,因为您希望隐藏该逻辑,以防将来要替换或修改它,而不会破坏您与班级用户的“合同” .
protected 方法可用于扩展您的类的类。因此,也许您希望某些实现可用于覆盖 - 或者您可能需要一个扩展类来实现此方法以使您的类工作,但这不是您向类的调用者公开的“合同”的一部分或那些调用扩展类的人。
使用package 创建包中其他类可以调用的实现代码,但您不希望向使用您的类的人公开(不是您与用户的“合同”的一部分)。我使用包如果我需要从单元测试中测试一些棘手的实现代码,但又不想将方法公开。
【讨论】:
要了解限制对方法的访问的好处,请考虑以下几点:您可以安全地更改甚至从类中删除 private 方法,因为您知道它只能从该类中访问。如果您要发布 API,并且公开了 public 方法,那么它就永远存在。如果您尝试更改它,您将破坏依赖它可用的代码。您必须考虑代码将如何随着时间的推移而发展,才能充分理解这一点。
如果有方法,我相信唯一可以 无论如何,使用方法是包含该方法的对象吗?
不,不是真的。方法可以声明为静态的,这意味着它们不需要调用对象。
【讨论】: