0

我认为没有区别,但后来我遇到了这个:

public class Whatever
{

 String toString()  
{
//stuff
}

}

此代码导致编译器错误:

toString()inWhatever不能覆盖toString()in java.lang.Object;试图分配较弱的访问权限;曾是public

如果我明确键入public String toString()代码编译就好了。

4

3 回答 3

5

如果您不对public方法和字段使用访问说明符,则假定它们处于package低级可见性。

这是一个很好的图表,说明了在课堂之外的可见性方面的含义package和含义:public

Modifier       Class    Package   Subclass  World
----------------------------------------------------------
public           Y         Y         Y        Y       
protected        Y         Y         Y        N
no modifier      Y         Y         N        N       <--- This is package level
private          Y         N         N        N

Y表示方法、类或字段是可见的。

N表示方法、类或字段可见

于 2013-03-23T23:07:18.673 回答
0

@Hunter McMillen 提到了包级别的可见性(+1)。

我只想添加一个简短的解释这是什么意思。这意味着来自同一包的类和当前类的子类,即使它们本身属于其他包,也可以访问此方法/字段。

于 2013-03-23T23:09:57.573 回答
0

在继承中,当覆盖方法时,您不能缩小方法的访问范围。在这里,类中的toString()方法Object具有public访问权限,并且您的类Whatever试图通过将访问级别更改为(相当于未指定访问修饰符)来缩小其范围package,这是不允许的。

水平方法package可以定义为

void someMethod () {
}

void如果您在此处看到,则ie之前没有访问修饰符publicprotected或者private这意味着同一包中的所有类都Whatever可以访问它。包外的任何包都无法访问此方法,甚至Whatever.

当您显式编写public时,整个将可以随意使用它。

于 2013-03-23T23:12:21.547 回答