0

这是我的课:

public class T {
    public  int num = 100;
    private int num2 = -1;

    //inner class
    public static class Inner {
        private int num2 = 250;

        public void method() {
            System.out.println(num2);//calls inner class num
            System.out.println(...);//should print class T num
            System.out.println(...);//should print class T num2
        }   
    }
}

如何使第二个和第三个println打印T类的numnum2

4

2 回答 2

7

你不能 - 你的Inner类不是内部类,它是一个静态嵌套类。换句话说,它独立存在,没有引用 T 的实例。

如果您删除声明的static一部分Inner,则可能:

public class Inner {
    private int num2 = 250;

    public void method() {
        System.out.println(num2);//calls inner class num
        System.out.println(num);//should print class T num
        System.out.println(T.this.num2);//should print class T num2
    }   
}
于 2012-11-30T11:34:58.687 回答
4

当您声明一个嵌套类static时,这意味着您不需要外部类的实例来创建您的案例中的嵌套类的实例Inner,因此您无法访问Outer类的属性。

但是删除static 保证例如Inner类的实例会有Outer类,因此它可以访问Outer类的成员。

于 2012-11-30T11:39:51.567 回答