Java的内部类和C++中的嵌套类有本质的不同:C++的嵌套类没有指向包装类的句柄。仅仅表达一个 的概念;但是Java的内部类不同,它可以访问包装类的成员(这表示它拥有指向包装类的句柄)。
匿名内部类是内部类的一种简化写法:return new Wrapper {
...
};
等价于:Wrapped extends Wrapper {
...
}
return new Wrapped();
难道匿名内部类就只这一点作用吗?
考虑一下这样的case:
package com.test.mianshi; interface ICount { int count(); } class Parent { int i = 0; int count() { return i++; } } /** * 有一个类Child,它既想继承Parent的count()方法, * 又想实现ICount接口中的count方法, * 这个时候怎么办呢?内部类就可以大显身手了: */ class Child extends Parent { ICount getCount() { return new ICount() { int i = 0; public int count() { return i * 2; } }; } }