NestedClass需要一些解释

时间:2018-04-14 20:43:59

标签: java

我有这个代码,但我根本不理解它,我不明白为什么它的一个vaues返回到最初初始化的值,另一个继续它离开的地方;

代码:

public class Out{

private int value = 1;

public In initBrenda(String emri) {
    return new Brenda(emri);
}

protected class In{

    private int value = 10;
    private String name;

    public Brenda(String name) {
        this.name= name;
    }

    public void printIn() {
        System.out.println(name+ ": value= " + value++);
    }

    public void printOut() {
        System.out.println(name+ ": out value = " + Out.this.value++);
    }
}

}

测试类:

public class OutTest{

public static void main(String[] arg) {
    Out j = new Out();
    Out.In b = j.initBrenda("111");        
    b.printIn();
    b.printIn();
    b.printOut();
    b.printOut();

    System.out.println("=======");
    Out.In b1 = j.new In("222");
    b1.printIn();
    b1.printIn();
    b1.printOut();
    b1.printOut();
}

}

111: value= 10
111: value = 11
111: value out= 1
111: value out = 2
=======
222: value = 10
222: value = 11
222: value out = 3
222: value out = 4

我的问题是为什么out不重置为1,并重新开始计数!! 谢谢!!

1 个答案:

答案 0 :(得分:0)

  

我的问题是为什么out不会重置为1,并重新开始计数!

为什么要这样?您在此处引用value的{​​{1}}字段,其代码中包含一个Out个实例。

当您创建jIn)的新实例时,您只为j.new In("222");的同一实例In创建j的新实例。此处未创建Out的新实例。

因此Out未重置,因为没有重置它。