覆盖没有具有受保护访问修饰符的访问修饰符的方法

Sta*_*nko 7 java overriding access-modifiers

覆盖方法时,不允许降低继承方法的可见性.根据下表,protected比以下更容易访问no modifier:

            | Class | Package | Subclass | World
————————————+———————+—————————+——————————+———————
public      |  y    |    y    |    y     |   y
————————————+———————+—————————+——————————+———————
protected   |  y    |    y    |    y     |   n
————————————+———————+—————————+——————————+———————
no modifier |  y    |    y    |    n     |   n
————————————+———————+—————————+——————————+———————
private     |  y    |    n    |    n     |   n

y: accessible
n: not accessible

但是当我尝试覆盖f()(参见SubClass)然后我得到错误:

无法从MyInterface中降低继承方法的可见性.

MyInterface中的方法没有访问修饰符,SubClass中的方法受到保护,因此更易于访问.我在这里错过了什么?

public interface MyInterface {
  void f();
}

public abstract class MyClass {
  protected abstract void f();
}

public class SubClass extends MyClass implements MyInterface{
   protected void f() { }
}
Run Code Online (Sandbox Code Playgroud)

Ami*_*ila 13

接口中的方法隐式具有访问修饰符public.因此,当您使用它时protected,它是一个较弱的访问修饰符.