我认为没有区别,但后来我遇到了这个:
public class Whatever
{
String toString()
{
//stuff
}
}
此代码导致编译器错误:
toString()inWhatever不能覆盖toString()injava.lang.Object;试图分配较弱的访问权限;曾是public
如果我明确键入public String toString()代码编译就好了。
我认为没有区别,但后来我遇到了这个:
public class Whatever
{
String toString()
{
//stuff
}
}
此代码导致编译器错误:
toString()inWhatever不能覆盖toString()injava.lang.Object;试图分配较弱的访问权限;曾是public
如果我明确键入public String toString()代码编译就好了。
如果您不对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表示方法、类或字段不可见
@Hunter McMillen 提到了包级别的可见性(+1)。
我只想添加一个简短的解释这是什么意思。这意味着来自同一包的类和当前类的子类,即使它们本身属于其他包,也可以访问此方法/字段。
在继承中,当覆盖方法时,您不能缩小方法的访问范围。在这里,类中的toString()方法Object具有public访问权限,并且您的类Whatever试图通过将访问级别更改为(相当于未指定访问修饰符)来缩小其范围package,这是不允许的。
水平方法package可以定义为
void someMethod () {
}
void如果您在此处看到,则ie之前没有访问修饰符public,protected或者private这意味着同一包中的所有类都Whatever可以访问它。包外的任何包都无法访问此方法,甚至Whatever.
当您显式编写public时,整个将可以随意使用它。