当我们在默认类中使用公共方法时,为什么编译器不会出错

时间:2013-10-15 01:42:49

标签: java oop access-modifiers

为什么JAVA编译器在默认类中有公共方法时不会出错?

当我们有非公共类(比方说默认访问级别),如果我们在该类中有公共方法,如下所示,

class Main {

    public void doStuff() {

    }
}

然后我们无法从同一个包之外访问上面的doStuff()方法。但是对于上述方法减速具有公共访问修饰符是合法的。那么它的目的是什么?

3 个答案:

答案 0 :(得分:2)

允许public访问具有包可见性的类成员是没有害处的:以这种方式定义它没有矛盾,因此编译器允许它。

但是,你肯定是这样做的,即使一个包可见类public的成员不会扩展其可见性:如果拥有类具有包可见性,那么使其所有公共成员包也可见要改变什么。

答案 1 :(得分:2)

因为它不是错误,并且因为可能需要避免错误:例如,如果它是接口方法的实现。

答案 2 :(得分:1)

同一个包中的某个人可以实例化一个Main,并将其作为Object或Interface传递给另一个类。在前一种情况下,像toString()和equals()这样的方法必须是公共的,在接口的后一种方法中必须是。