通过对象引用访问实例变量的静态嵌套类的 Java 示例 [重复]

Posted

技术标签:

【中文标题】通过对象引用访问实例变量的静态嵌套类的 Java 示例 [重复]【英文标题】:Java example of a static nested class accessing an instance variable through an object reference [duplicate] 【发布时间】:2017-05-18 00:56:30 【问题描述】:

根据 Java 教程,静态嵌套类不能直接引用在其封闭类中定义的实例变量或方法,但它只能通过对象引用来使用它们。有人可以给我一个例子吗?我是否需要在静态嵌套类中创建封闭类的实例,然后引用该实例的实例变量/方法?

【问题讨论】:

【参考方案1】:

考虑一个名为Main 的类和一个private 字段value,给定一个名为static 的嵌套类Nested,如果没有Main 的实例,您将无法访问value。喜欢,

public class Main 
    private final int value = 100;

    static class Nested 
        static void say(Main m) 
            System.out.println(m.value); // <-- without m, this is illegal.
        
    

注意value privateNested 可以访问它(通过引用 m)。

【讨论】:

【参考方案2】:
class A 
  public void foo() ...
  public static class B 
    public void bar() 
      foo(); // you can't do this, because B does not have a containing A. 
        //If B were not static, it would be fine
     
  


// somewhere else 

A.B val = new A.B(); // you can't do this if B is not static

【讨论】:

我知道你不能这样做,但不应该这样做吗? A a = new A(); A.B b = new a.B();其他静态成员可以通过这种方式访问​​。

以上是关于通过对象引用访问实例变量的静态嵌套类的 Java 示例 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

内部类访问外部类的变量必须是final吗,java静态方法中不能引用非静态变量,静态方法中不能创建内部类的实例

JAVA 静态方法不能访问直接

一个java内部类有几个分类?

在java语言中,静态变量和普通变量有啥区别?

java内部类的静态嵌套类

内部类和静态内部类有什么区别?