【问题标题】:Private, Protected, Public and me confused [closed]私人,受保护,公共和我很困惑[关闭]
【发布时间】:2013-02-02 07:56:27
【问题描述】:

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

我可以想象 public private protected 关键字对变量的好处,因为它可以防止特定类之外的对象进行不必要的“值更改”

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

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

【问题讨论】:

标签: java


【解决方案1】:

首先,我们来明确一下publicprotected、package、private访问的含义。在每种情况下,您都认为对象必须存在才能使用非静态方法是正确的。但是,这些关键字表示允许谁调用对象上的方法:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    package(方法前没有关键字)表示该方法可以被与封闭类在同一个包中的类中的任何代码调用。

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

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

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2021-03-19
        • 2012-06-15
        • 2019-02-14
        • 1970-01-01
        • 2023-04-08
        • 2015-06-17
        • 2017-09-18
        • 1970-01-01
        • 2017-12-19
        相关资源
        最近更新 更多