java - 我认为内部类可以访问外部类变量/方法?

标签 java

我确实阅读了许多讨论内部类的主题,我的印象是内部类可以访问封闭类的变量和方法。下面我有一个外部类和一​​个内部类,在测试类中我创建了一个外部类的实例,然后从中创建了一个内部类的实例。但是我无法通过内部类引用访问 String 变量 a。帮助?

public class OuterClass {

    String a = "A";
    String b = "B";
    String c = "C";

    class InnerClass {
        int x;

    }

    public static class StaticInnerClass {
        int x;
    }

    public String stringConCat() {
        return a + b + c;

    }
}

public class TestStatic {

    public static void main(String args[]) {

        OuterClass.StaticInnerClass staticClass = new OuterClass.StaticInnerClass();
        OuterClass outer = new OuterClass();
        OuterClass.InnerClass inner = outer.new InnerClass();

        System.out.println(inner.a);// error here, why can't i access the string
                                    // variable a here?

    }
}

最佳答案

内部类可以通过自己的方法访问外部类的方法和属性。看下面的代码:

class OuterClass {

    String a = "A";
    String b = "B";
    String c = "C";

    class InnerClass{
        int x;
        public String getA(){
            return a; // access the variable a from outer class
        }
    }

    public static class StaticInnerClass{
        int x;
    }

    public String stringConCat(){
        return a + b + c;    
    }
}


public class Test{

    public static void main(String args[]) {

        OuterClass.StaticInnerClass staticClass = new OuterClass.StaticInnerClass();
        OuterClass outer = new OuterClass();
        OuterClass.InnerClass inner = outer.new InnerClass();

        System.out.println(inner.getA()); // This will print "A"
    }
}

关于java - 我认为内部类可以访问外部类变量/方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12251922/

相关文章:

java - 如何动态设置嵌入式 WildFly 服务器以使用 Maven 进行测试

java - 如何将鼠标监听器添加到使用 Graphics.drawLine() 绘制的线条上

java - 如何使用 Java 在 XML 文件中保存加密/散列密码

java - 来自 Java 的 PostgreSQL 查询中的可选日期参数不起作用

java - 无法使用外部 jar 文件在远程命令行中运行 java

Java 将对象输入流读取到数组列表中?

Java MDC 记录器 - MDC.put() 过多的方法

java - SQL Server "Application=Intent"不工作 JDBC

java - 在java中以stat.mod格式设置文件权限

java - Log4j2 AsyncAppender 线程不会死在 tomcat 取消部署导致内存泄漏