Java 私人的,受保护的,公共的和我困惑的

Java 私人的,受保护的,公共的和我困惑的,java,Java,在方法声明中使用公私保护关键字有什么好处 我可以想象变量的公私保护关键字的好处,因为它可以防止特定类之外的对象进行不必要的值更改 但我无法想象将关键字private、public或protected放在方法声明中的好处 如果有一个方法,我相信唯一可以使用该方法的对象就是包含该方法的对象?首先,让我们澄清公共、受保护、包和私有访问的含义。在每种情况下,必须存在一个对象才能使用非静态方法,这一点是正确的。但是,这些关键字表示允许谁调用对象上的方法: 任何人都可以调用公共方法。 受保护的方法可以由同一

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

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

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


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

首先,让我们澄清公共、受保护、包和私有访问的含义。在每种情况下,必须存在一个对象才能使用非静态方法,这一点是正确的。但是,这些关键字表示允许谁调用对象上的方法:

任何人都可以调用公共方法。 受保护的方法可以由同一包中的任何类或其他包中的子类调用。 没有任何访问修饰符的包私有方法只能由同一包中的类调用。 私有方法只能由同一类调用。 作为一个例子,我经常使用私有方法来分解代码,否则这些代码会在几个不同的方法中重复。此代码不是供其他类使用的公共接口的一部分。相反,它是一个辅助方法,它执行类本身内部的一些计算。

public意味着该方法可以被重写,并且可供封闭类可见的任何代码使用

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

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

方法前的package no关键字表示该方法可以由与封闭类位于同一个包中的类中的任何代码调用

这些不同的关键字在设计如何使用类时很有用。公共方法是向类用户公开的契约的一部分。私有方法通常是实现代码,不应以任何方式对外公开,因为您希望隐藏该逻辑,以防将来在不破坏与类用户的契约的情况下替换或修改它

受保护的方法可用于扩展类的类。因此,可能有一些实现需要覆盖,或者可能需要一个扩展类来实现此方法,以便使类工作,但这不是向类的调用方或调用扩展类的调用方公开的契约的一部分


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

< P>了解限制对方法的访问的好处,请考虑:您可以安全地更改或甚至从类中移除私有方法,因为你知道它只能从那个类中访问。如果您正在发布一个API,并且公开了一个公共方法,那么它将永远存在。如果您试图更改它,您将破坏依赖于它可用的代码。您必须考虑代码将如何随着时间的推移而演变,以充分理解这一点

如果有一种方法的话,我相信 使用方法是包含该方法的对象吗

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

检查此方法。