2

私はこのクラスを持っています:

public abstract class Test {
    public abstract class SubClass extends Test
    {

    }
}

このようにアクセスする必要があります

public class JavaApplication1 extends Test.SubClass {

     public JavaApplication1()
     {
         super();
     }
}

しかし、スーパーに問題があります。静的にも拡張テストにも使用できません。どうすればよいですか? 前もって感謝します

4

3 に答える 3

2

内部クラスをそれを含むクラスの外部から拡張するのはなぜですか? 内部クラスは、クラス内で特定のニーズが必要な場合にのみ使用してください。クラスによって提供されるサービスから恩恵を受ける可能性のあるクラスがさらにある場合、それは内部ではなくトップレベルのクラスであるべきです。

于 2013-02-09T16:21:14.210 に答える
2

問題は、内部クラスにアクセスするには外部クラスのインスタンスが必要なことです。したがって、コンストラクターsuper()から直接呼び出すことはできません。JavaApplication1あなたが得ることができる最も近いものは、引数が1つのコンストラクターを作成し、外部クラスのインスタンスを渡し、そのインスタンスで呼び出すsuperことです: -

public JavaApplication1(Test test)
{
    test.super();
}

次に、コンストラクターを次のように呼び出します。

new JavaApplication1(new Test() {});

これはうまくいきます。ただし、引数が 0 のコンストラクターでは、Test最初にクラスのインスタンス (この場合、Test は抽象であるため、匿名の内部クラス) を作成してから、 を呼び出す必要がありsuper()ます。

public JavaApplication1() {
    new Test() {}.super();
}
于 2013-02-09T16:27:00.080 に答える
2

1 つの解決策: SubClass を static 内部クラスにします。

別の可能な解決策:

public class JavaApplication1 extends Test.SubClass {

   public JavaApplication1() {
      new Test() {}.super();
   }

   public static void main(String[] args) {
      new JavaApplication1();
   }
}

abstract class Test {
   public Test() {
      System.out.println("from Test");
   }

   public abstract class SubClass extends Test {
      public SubClass() {
         System.out.println("from SubClass");
      }
   }
}

どちらが返されますか:

from Test
from Test
from SubClass
于 2013-02-09T16:19:30.733 に答える