Java内部类:扩展多个类的关键字

Java内部类:扩展多个类的关键字,java,constructor,instance,subclass,extends,Java,Constructor,Instance,Subclass,Extends,我有多个级别的内部类。extend关键字适用于第一个子级别,但不适用于第二个子级别。意思是: public class A{ ......... public class B extends A{ .......... public class C extends B{ ........ } } } 这给了我一个关于公共类C扩展B{的错误。它说: 由于某些中间构造函数调用,没有类型A的

我有多个级别的内部类。extend关键字适用于第一个子级别,但不适用于第二个子级别。意思是:

public class A{
       .........
    public class B extends A{
           ..........
        public class C extends B{
             ........
        }
    }
}
这给了我一个关于
公共类C扩展B{
的错误。它说:

由于某些中间构造函数调用,没有类型A的封闭实例可用。


为什么会出现此错误以及如何修复此错误?我以为默认构造函数会处理此问题。

您使用的是非静态子类,需要引用外部实例。如果不需要它们的非静态性,只需将static关键字添加到内部类的定义中即可。我不确定为什么给定的示例不起作用但对您来说。

您的代码是合法的,应该可以正常工作。您出现错误的事实意味着:

  • 你还没有发布所有的代码
  • 您可以使用断开/修改的jre
  • 我看到了你的错误

    由于某些中间原因,没有可用的A型封闭实例 构造函数调用

    因此,我假设在您的代码中声明了一些构造函数。您失败的可能原因是您使用类
    A
    的参数声明了构造函数,但没有为
    B
    C
    声明构造函数。解释如下:

    如果默认构造函数是隐式的,则这是编译时错误 已声明,但超类没有可访问的构造函数 它不接受参数,也没有throws子句


    另一种可能是您的包中已经有
    A
    B
    类,或者您已经从另一个包中导入
    ed
    A
    B
    类。
    如果编译器不知道您要扩展什么类,则错误可能会产生误导。

    您必须使B类成为静态的以解决问题。检查一下:您是如何编译此代码的?它不在Eclipse中编译,但使用simple
    javac
    可以编译。示例检查您是否需要非静态的内部类-很好的explanation“Java不允许嵌套这些”是错误的。如果我们使用标准编译器,它可以很好地编译。我怀疑OP使用的是Eclipse,它的编译器显然有问题。工作示例不完全正确,您的答案并没有真正回答这个问题(正如您所说的“我不确定为什么给定的示例对您不起作用”)由于他的代码是有效的,这意味着它是OP的IDE中的错误,所以没有解释是什么导致了这个错误以及如何修复它的帖子并不是真正的答案。我们现在可以发布的最佳答案是“这是一个错误,报告它”@Pshemo我只是想提供帮助。如果没有更多信息,真的不可能调试真正的问题。在我看来,OP发布了一个有缺陷的、简化的示例,但没有对其进行测试。我不是说你没有帮助,我只是说这些信息不应该作为答案发布。我们也可以通过发布co来提供帮助mments.“如果没有更多信息,真的不可能调试真正的问题”100%同意,这就是为什么我投票关闭这个问题,直到OP提供更多信息为止。@Pshemo gottcha,我想我们在同一页上