2

我有这门课:

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

    }
}

我需要像这样访问它

public class JavaApplication1 extends Test.SubClass {

     public JavaApplication1()
     {
         super();
     }
}

但是超级有问题。我不能使用它静态也不能扩展测试我该怎么办?提前致谢

4

3 回答 3

2

一种解决方案:使 SubClass 成为静态内部类。

另一种可能的解决方案:

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 回答
2

为什么要从包含它的类的外部扩展一个内部类?仅当您需要类中的特定需求时才应使用内部类。如果有更多类可以从类提供的服务中受益,那么它不应该是内部类,而是顶级类。

于 2013-02-09T16:21:14.210 回答
2

问题是访问内部类需要外部类的实例。因此,您不能直接super()JavaApplication1构造函数中调用。最接近的方法是创建一个 1-arg 构造函数,传递外部类的实例,然后super在该实例上调用:-

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

然后调用构造函数: -

new JavaApplication1(new Test() {});

这将正常工作。但是,使用 0-arg 构造函数,您必须首先创建一个Test类的实例(在这种情况下,是一个匿名内部类,因为 Test 是抽象的),然后调用super().

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