当前位置: 首页 > 知识库问答 >
问题:

为什么我不能访问Java中的内部类?[重复]

段溪叠
2023-03-14

我在Java中使用嵌套类时遇到问题,有人知道为什么Java不允许我这样做吗?

public class A{
    private class B{
        public B(){
            System.out.println("class B");
        }
    }

    public static void main(String[] args){
         A a = new A();
         B b = new B();
    }
} 

共有1个答案

琴英华
2023-03-14

因为您正试图从静态方法访问非静态内部类。

第一种解决方案是将内部类B更改为静态

public class A{
    private static class B {
        public B() {
            System.out.println("class B");
        }
    }

    public static void main(String[] args){
         A a = new A();
         B b = new B();
    }
}

static内部类可以从任何地方访问,但非静态类需要容器类的实例。

另一个解决办法是:

A a = new A();
B b = a.new B();

这将使您更好地了解内部类在Java中的工作方式:http://www.javaworld.com/article/2077411/core-java/inner-classes.html

 类似资料:
  • 伊登 JLS所说的是: 设C是ClassName表示的类。设n是一个整数,使得C是类的第n个词汇封闭类,在该类中出现有条件的this表达式。 [...] 如果当前类不是类C或C本身的内部类,则为编译时错误。 在的情况下,内部类集。这意味着上面的代码应该可以正常工作。发生了什么?

  • (我一直在重读那个问题标题,思考它看起来有多荒谬,但我向你保证,这是对问题的最佳描述,我有一个实际的应用程序,其中这是最好的结构。我发誓我没有疯。) 考虑以下内容。每个块都是一个单独的文件: 注意,enclosinstance业务是为了解决涉及中间构造函数调用的问题。请参阅“为什么外部类不能扩展内部类?”。 我希望输出为“2”。但是相反,我在System.out.println(a.this.I)

  • 问题内容: 我想做的是这样的: Eclipse中给了我这个编译错误的:。 当我将类设为静态时,该错误消失。我可以使static,但我不明白为什么我不能在内部类中声明一个。 问题答案: 定义为嵌套类型的类型始终是隐式的(请参见JLS§8.9。Enums) 您不能在非静态类型(也就是“内部类”,请参见JLS§8.1.3。内部类和封闭实例)中拥有静态嵌套类型。 因此,您不能在非静态嵌套类型中包含内部类型

  • 为什么我不能这样做/是否有解决方法来实现这一点: 这两个编译错误是 > On

  • 问题内容: 我观察到外部类可以访问内部类的私有实例变量。这怎么可能?这是演示相同代码的示例代码: 为什么允许这种行为? 问题答案: 内部类只是一种将真正属于原始外部类的功能完全分开的方法。当你有两个要求时,可以使用它们: 如果是在单独的类中实现的,那么外部类中的某些功能将最为清晰。 即使在单独的类中,该功能也与外部类的工作方式紧密相关。 鉴于这些要求,内部类可以完全访问其外部类。由于它们基本上是外

  • 如果我有一个数据帧并重命名了列,则无法用其新名称访问列。 见示例说明: 现在,如果我按照这里建议的方式重命名列“a”。 现在,让我们尝试使用“newname”访问该列 但我仍然可以使用旧名称访问该列。 似乎我已经更改了列的名义名称,但这种更改并没有传播到数据帧结构中用于区分列的字典中。 问:为什么会发生这种行为,我如何修复它?