为什么方法必须公开?

Ang*_*ver 5 java oop interface

考虑以下类:

class A {
    void print() {
        System.out.println("A");
    }
}

class B extends A implements C {
}

public interface C {
    void print();

}
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

继承的方法A.print()无法隐藏C中的公共抽象方法

现在,我明白print()为了消除编译错误必须公开,但这背后的原因是什么?

Rah*_*thi 6

答案是简单的接口方法总是公开的,否则只使用组合而不是继承.另请注意,在覆盖方法时,您无法缩小方法的访问级别.

Oracle Docs说:

访问修饰符public(第6.6节)适用于各种接口声明.

  • 这是规则,而不是原因. (2认同)

Ala*_*kes 5

B#print 永远不会真正私密,因为任何人都可以通过界面调用它:

B b = new B();
C c = b;
c.print();
Run Code Online (Sandbox Code Playgroud)

当Java有效公开时,Java不会让你假装它是私有的.(C++可以;不同的语言做出不同的权衡.)