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