2

在java中,我们真的必须这样做才能使我们的变量或方法公开吗?例如:

void aaa() {
...
}

或者

public void aaa() {
...
}

如果是必须的,为什么?

4

7 回答 7

13

好吧,这不是一个变量,而是一种方法——但是,是的,您必须这样做才能使方法公开。如果您不这样做,则它具有默认的包访问权限,并且无法从其他包访问。您应该自己判断您编写的任何特定方法是否应该只能在同一个类(make it private)、子类(make it protected)、包(保留默认值;不幸的是,您不能明确声明包访问)或对一切(让它public)。

(这是访问修饰符的轻微简化,但这是一个开始。)

至于为什么会这样——通常你应该限制可见性,以便你的类型只公开对其试图封装的概念真正有意义的方法。您可能有更多特定于实现的私有方法,外部世界不应该知道或关心这些方法。

于 2012-02-22T17:05:49.350 回答
8

您可以省略访问级别关键字

您可以在除 main 方法附近的任何地方省略访问级别修饰符。在那里它必须设置为公开。

于 2012-02-22T17:15:43.073 回答
5

不添加修饰符实际上与,或不同publicprivateprotected

没有修饰符,只有类本身和同一个包中的任何类可以访问该属性。

在此处了解更多信息:在 Java 中,default、public、protected 和 private 之间的区别

于 2012-02-22T17:06:49.617 回答
1

这两种方法是不同的:第一种具有包可见性,而第二种是公开的。

不同之处在于包可见的方法对同一包内的方法公开,而公共方法对包内外的所有方法可见。

因此,您的问题的答案取决于您的意图:如果您的方法确实是组件接口的一部分,请将其设为私有;如果它设计为仅在包内使用,请将其保持为默认包可见性。

于 2012-02-22T17:06:18.183 回答
0

在您的第一个示例中,该方法将是包范围的——即只有同一个包中的东西可以使用它。所以是的,您确实需要这样声明公共字段/方法/类,否则它们将具有包范围。

于 2012-02-22T17:06:19.407 回答
0

默认为包私有。

如果您想要公开或其他任何内容,则必须指定它。

方法可以被类本身、同一个包内的其他类访问,但不能在包外访问,子类也不能。

见底部图表: http:
//docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

于 2012-02-22T17:06:39.120 回答
0

我认为它假设在 Java 中是公共的,所以它并不是真正需要的。如果你开始有public, protected, 并private在单个类中加入混合,则更容易看到该方法可能具有的范围。

于 2012-02-22T17:06:57.497 回答