我有这堂课:
public abstract class Test {
public abstract class SubClass extends Test
{
}
}
我需要像这样访问它
public class JavaApplication1 extends Test.SubClass {
public JavaApplication1()
{
super();
}
}
但是有超级问题。 我不能使用它静态也不扩展测试 我该怎么办? 提前致谢
答案 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();
}