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