Java 子类不可见的抽象类中受保护接口中的方法

Java 子类不可见的抽象类中受保护接口中的方法,java,Java,如果我有 public abstract class Test { public void foo(){} protected interface Test1{ public void bar(); } } public class NewTest extends Test{ } 想知道为什么NewTest虽然扩展了抽象测试,但却看不到bar()?它需要NewTest实现Test.Test1。不知道为什么 您可以使接口(Test1)static引

如果我有

public abstract class Test {

    public void foo(){}

    protected interface Test1{
        public void bar();
    }

}

public class NewTest extends Test{
}

想知道为什么NewTest虽然扩展了抽象测试,但却看不到
bar()
?它需要NewTest实现Test.Test1。不知道为什么

您可以使接口(
Test1
static
引用它,而不需要父类的实例(
Test

例如:

public abstract class Test {
  public void foo() {}

  protected static interface Test1 {
    public void bar();
  }
}

public class NewTest extends Test {}

与成员变量或方法的想法相同:如果类可见,则可以访问静态成员/方法/内部类;如果未使用
static
关键字,则需要类的实例来访问它们。

接口
Test1
只是一个接口,无论它是与
Test
类一起定位还是独立的。
Test
中存在接口并不意味着
Test
实现了
Test1
,因此
NewTest
也不会实现它,除非您使用
implements Test显式实现它。Test1
您需要实现Test1类。您需要使用以下语法:
Class.InnerClass

以下是一个例子:


Test
类没有实现Test1类<代码>foo()将不会对任何其他人可见,除非您实现该接口。

为什么会这样?您刚刚定义了接口--
Test
没有实现它。显示调用
bar
并产生编译器错误的代码。