【问题标题】:Why does the compiler not give error when we have public methods inside default class当我们在默认类中有公共方法时,为什么编译器不会出错
【发布时间】:2013-10-22 17:08:20
【问题描述】:

当我们在默认类中有公共方法时,为什么 JAVA 编译器不报错?

当我们有非公共类(假设具有默认访问级别)并且如果我们在该类中有公共方法,如下所示,

class Main {

    public void doStuff() {

    }
}

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

【问题讨论】:

  • 方法也可以通过反射调用——在这种情况下,javac 会发出通知
  • 因为在 Java 的旧时代,您可以从默认包中 import;这就是他们关于向后兼容性的伟大之处,它无缘无故地阻碍了几代人的未来。

标签: java oop access-modifiers


【解决方案1】:

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

但是,您肯定是正确的,使包可见类的成员public 不会扩展其可见性:如果拥有的类具有包可见性,则使其所有公共成员也可见包不会改变任何东西。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-21
        • 2011-01-04
        • 2021-06-27
        • 2022-01-06
        • 2015-02-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多