我认为没有区别,但后来我遇到了这个:
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
时,整个将可以随意使用它。