0

If I have

public abstract class Test {

    public void foo(){}

    protected interface Test1{
        public void bar();
    }

}

public class NewTest extends Test{
}

wondering why bar() isn't visible to NewTest though it extends abstract Test? It requires to have NewTest implements Test.Test1. wondering why is that.

4

3 回答 3

4

接口Test1只是一个接口,无论它位于Test类中还是独立的。接口的存在Test并不意味着Testimplements Test1,所以NewTest也不实现它,除非你明确地用implements Test.Test1.

于 2013-11-12T20:31:24.343 回答
2

您可以使接口 ( Test1)static在没有父类 ( ) 的实例的情况下引用它Test

例如:

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

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

public class NewTest extends Test {}

可以像考虑成员变量或方法一样考虑这一点:如果类可见,则可以访问静态成员/方法/内部类;如果不使用关键字,则需要类的实例来访问它们。static

于 2013-11-12T20:31:18.747 回答
1

您需要实现 Test1 类。您需要使用以下语法: Class.InnerClass

这是示例:http: //ideone.com/wr5bON

该类Test未实现 Test1 类。 foo() 除非您实现该接口,否则其他任何人都不会看到。

于 2013-11-12T20:44:00.227 回答