内部类在Java中必须是静态的吗?

Praveen:

我创建了一个非静态内部类,如下所示:

class Sample {
    public void sam() {
        System.out.println("hi");
    }    
}

我用这样的main方法调用它

Sample obj = new Sample();
obj.sam();

它给出了一个编译错误:non-static cannot be referenced from a static context当我将非静态内部类声明为static时,它可以工作。为什么呢?

灰分

对于非静态内部类,编译器会自动向“所有者”对象实例添加隐藏的引用。当您尝试从静态方法(例如main方法)创建它时,没有拥有的实例。这就像尝试从静态方法中调用实例方法一样-编译器将不允许它,因为您实际上没有要调用的实例。

因此,内部类本身必须是静态的(在这种情况下,不需要拥有实例),或者您只能从非静态上下文中创建内部类实例。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章