为什么JAVA编译器在默认类中有公共方法时不会出错?
当我们有非公共类(比方说默认访问级别),如果我们在该类中有公共方法,如下所示,
class Main {
public void doStuff() {
}
}
然后我们无法从同一个包之外访问上面的doStuff()方法。但是对于上述方法减速具有公共访问修饰符是合法的。那么它的目的是什么?
答案 0 :(得分:2)
允许public
访问具有包可见性的类成员是没有害处的:以这种方式定义它没有矛盾,因此编译器允许它。
但是,你肯定是这样做的,即使一个包可见类public
的成员不会扩展其可见性:如果拥有类具有包可见性,那么使其所有公共成员包也可见要改变什么。
答案 1 :(得分:2)
因为它不是错误,并且因为可能需要避免错误:例如,如果它是接口方法的实现。
答案 2 :(得分:1)
同一个包中的某个人可以实例化一个Main,并将其作为Object或Interface传递给另一个类。在前一种情况下,像toString()和equals()这样的方法必须是公共的,在接口的后一种方法中必须是。