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()
为了消除编译错误必须公开,但这背后的原因是什么?
答案是简单的接口方法总是公开的,否则只使用组合而不是继承.另请注意,在覆盖方法时,您无法缩小方法的访问级别.
Oracle Docs说:
访问修饰符public(第6.6节)适用于各种接口声明.
B#print
永远不会真正私密,因为任何人都可以通过界面调用它:
B b = new B();
C c = b;
c.print();
Run Code Online (Sandbox Code Playgroud)
当Java有效公开时,Java不会让你假装它是私有的.(C++可以;不同的语言做出不同的权衡.)