私有嵌套类是否为静态是否重要?

问题描述 投票:0回答:1

我有点困惑。在阅读Java教程时,一个问题对我来说“醒来”。如果我确定嵌套类需要使用私有访问修饰符,那么嵌套类是否将是静态的(根本)是否重要?最初,我认为没关系,但是在编写了一些类以验证我的直觉之后,在运行带有和不带有“ static”关键字的程序时,我发现了一些不同的“结果”。

以下代码无法编译,出现以下编译错误:“无法从静态上下文中引用非静态方法callByInnerClass()”

public class Outer
{
    private String outerString = "nnnn";
    private InnerStatic iS;
    public void createInnerClassInstance()
    {
        iS = new InnerStatic("innter"); 
    }


    public void runInnerMethod()
    {
        iS.callInnerMethod();
    }

    // if method runs it mean the inner static class can run outer methods

    public String calledByInnerClass()
    {
        System.out.println("Inner class can call Outer class non static method");
        System.out.println("nn value after ruuning inner class is: " +outerString );
    }

    public static class InnerStatic
    {
        public String innerString;

        public InnerStatic(String str)
        {
            innerString = str;
        }

        public void callInnerMethod()
        {
            System.out.println(innerString);
            outerString  = "aaa";
            calledByInnerClass();
        }

    }
}

在内部类之前删除“ static”关键字时,程序将成功编译。为什么当存在“ static”关键字时,嵌套类找不到其外部类实例(并认为是内部类)的原因是什么?我读到,从不同的类创建内部类的对象时,内部类会自动具有外部类的实例,但是这种情况有些不同。

我有点困惑。在阅读Java教程时,一个问题对我来说“醒来”。如果我决定嵌套类需要使用私有访问修饰符,那么嵌套的...

java private inner-classes
1个回答
0
投票

这是因为如果一个类是static,则不能有它的实例,如果它是一个内部类,就不能访问外部实例。了解有关静态类here的更多信息>


0
投票

您无法从静态类访问非静态calledByInnerClass方法。这就是为什么它会给出错误。为此,您需要将calledByInnerClass设为静态或将内部类设为非静态

© www.soinside.com 2019 - 2024. All rights reserved.