public class InnerClassTest1 {
private int inner_index = 100; private void printoutIndex() {
System.out.println(inner_index);
} public static void main(String[] args) {
InnerClassTest1 test1 = new InnerClassTest1();
InnerClassTest1.IamInnerClass iam = new InnerClassTest1().new IamInnerClass();
iam.output();
iam.testSelf(99);
test1.printoutIndex();
} private class IamInnerClass {
private int iamIndex = inner_index; private void output() {
printoutIndex();
System.out.println("in inner class: " + iamIndex);
} private void testSelf(final int index) {
new IamInnerClass() {
private int iamIndex = 1000000; private void checkout() {
System.out.println(iamIndex + index);
System.out.println("method inner: "
+ super.iamIndex);
}
}.checkout();

}
}
}在method testSelf() 里的System.out.println("method inner: "+ super.iamIndex); 这里的iamIndex为什么是100? 有点不太明白,super是调用父类的methods or fields,但是这里并不存在继承关系吧,为什么能用super??

解决方案 »

  1.   

    存在继承关系。
    new IamInnerClass() {
                    private int iamIndex = 1000000;                private void checkout() {
                        System.out.println(iamIndex + index);
                        System.out.println("method inner: "
                                + super.iamIndex);
                    }
                }
    这是一个匿名类的对象,该匿名类是IamInnerClass的子类。所以 super.iamIndex 即是指 IamInnerClass 中的 iamIndex,其值为 inner_index 的值,自然是 100 啦。呵呵。