将非静态数据成员用于非静态嵌套类,而不使用对象

时间:2015-05-31 05:25:48

标签: java nested-class non-static

class Outer
{
    int x=10;
    class Inner
    {
        void show()
        {
            System.out.println(x);
        }
    }
    public static void main(String args[])
    {
        Outer obj=new Outer();
        Inner obj1=new Outer().new Inner();
        obj1.show();
    }
}

我尝试创建一个非静态嵌套类,并尝试在非静态内部类中使用外部类的非静态数据成员。如果x是非静态的,我没有得到它,我如何使用它没有对象。请给我答案?

2 个答案:

答案 0 :(得分:1)

在没有对象的情况下使用它。内部(非静态嵌套)类具有对外部对象的引用,其中使用了var fibs = ArraySlice([1, 1]) var fibGenerator = GeneratorOf{ _ -> Int? in fibs.append(fibs.reduce(0, combine:+)) return fibs.removeAtIndex(0) } println(fibGenerator.next()) println(fibGenerator.next()) println(fibGenerator.next()) println(fibGenerator.next()) println(fibGenerator.next()) println(fibGenerator.next())

答案 1 :(得分:1)

内部类只是一个语法糖,可以隐式引用外部类。在内部(在javac编译之后),您的类Inner看起来像这样:

static class Inner
{
    private final Outer this$0;

    public Inner(Outer outer) {
        this$0 = outer;
    }

    void show()
    {
        System.out.println(this$0.x);
    }
}

当您编写Inner obj1=new Outer().new Inner();时,编译器会将其更改为Inner obj1=new Inner(new Outer());