2012-02-22 43 views
0

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

void aaa() { 
... 
} 

public void aaa() { 
... 
} 

如果是必须的,为什么呢?

+0

我不确定你的问题是什么。如果你想要一个方法是公开的,你必须声明它是公开的。默认情况下,它将具有默认(包)访问权限。 – DNA 2012-02-22 17:06:33

+4

[在Java中,public,default,protected和private有什么区别?](http://stackoverflow.com/questions/215497/in-java-whats-the-difference-between-public-default - 保护和私人) – 2012-02-22 17:08:20

+1

@RobHruska我认为你没有明确表示我的问题。请付出努力的解决方案,而不是调查一些重复 – El3ctr0n1c4 2012-02-22 17:22:36

回答

11

那么这不是一个变量,这是一种方法 - 但是,你必须这样做才能公开一个方法。如果你没有,它的默认包访问,并将不能从其他包访问。您应该自己判断您编写的任何特定方法是否只能在同一个类中访问(使其为private)为子类(使其为protected)才能访问该包(保留缺省值;不能明确指出包访问)或一切(使其成为public)。

(这是访问修饰符略有简化,但它是一个开始。)

至于为什么这种情况 - 通常你应该限制的知名度,使您的类型只公开方法这实际上对于它试图封装的概念是有意义的。你可能有更多的私有方法是特定于实现的,而外部世界不应该知道或关心的。

+0

非常具有说服力,谢谢.. – El3ctr0n1c4 2012-02-22 17:09:16

+4

@Downvoter:小心评论? – 2012-02-22 17:11:18

+2

@JonSkeet我认为人们有时候投票你的答案来检查Stackoverflow的投票功能是否适用于你的答案! – 2012-02-22 20:04:57

1

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

区别在于,软件包可见方法在同一个软件包内的方法中只出现在公共方法,而公共方法对于软件包内部和外部的所有方法都是可见的。

所以你的问题的答案取决于你的意图:如果你的方法真的是你的组件的接口的一部分,使其私人;如果它仅用于包装内部,请将其保留在默认包装可见性范围内。

0

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

0

我认为这是假设公众Java,所以它是不是真的required.If你开始有publicprotectedprivate投在一个类的组合,它是更容易看到该方法可能具有的范围。

5

You can ommmit access level keyword

你可以在任何地方ommmit访问级别修饰符除了靠近主要方法。它必须设置为公开。