0

私が持っている場合

public abstract class Test {

    public void foo(){}

    protected interface Test1{
        public void bar();
    }

}

public class NewTest extends Test{
}

抽象テストを拡張しているのに、なぜbar()NewTest に表示されないのだろうか? NewTest に Test.Test1 を実装する必要があります。それはなぜだろう。

4

3 に答える 3

4

インターフェイスは、クラスまたはスタンドアロンTest1に配置されているかどうかにかかわらず、単なるインターフェイスです。Testにインターフェイスが存在しても、それが を実装Testすることを意味するわけではないため、 で明示的に実装しない限り、それも実装しません。TestTest1NewTestimplements Test.Test1

于 2013-11-12T20:31:24.343 に答える
2

親クラスのインスタンス ( ) なしで参照するインターフェイス ( Test1)を作成できます。staticTest

例えば:

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 に答える