在Java中使用Sub抽象类

时间:2013-02-09 16:16:51

标签: java class abstract extend

我有这堂课:

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

    }
}

我需要像这样访问它

public class JavaApplication1 extends Test.SubClass {

     public JavaApplication1()
     {
         super();
     }
}

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

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

答案 2 :(得分: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();
}