【问题标题】:Using Sub Abstract Class in Java在 Java 中使用子抽象类
【发布时间】:2013-01-25 05:59:51
【问题描述】:

我有这门课:

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

    }
}

我需要这样访问它

public class JavaApplication1 extends Test.SubClass {

     public JavaApplication1()
     {
         super();
     }
}

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

【问题讨论】:

  • 什么问题? “我不能使用它”是什么意思?
  • 无论如何,如果您可以从其封闭类外部扩展非静态内部类,我会感到非常惊讶。

标签: java class abstract extend


【解决方案1】:

一种解决方案:将 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

【讨论】:

  • 我不能做静态的,因为我的 make 类也在使用它
  • @user2057399:它看起来很丑。 :)
【解决方案2】:

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

【讨论】:

  • 我正在更新一个我无法访问所有库和源代码的软件
【解决方案3】:

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

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

然后调用构造函数为:-

new JavaApplication1(new Test() {});

这会很好。但是,使用 0-arg 构造函数,您必须先创建 Test 类的实例(在本例中,是匿名内部类,因为 Test 是抽象的),然后调用 super()

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

【讨论】:

  • @HovercraftFullOfEels.. :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多