我讀有效的Java 2 - 第22項,並在標題中說:靜態和非靜態內部類的區別?
「在非靜態的青睞靜態成員類」,但在本章結尾
集合接口,如Set和List的實現, 通常使用非靜態成員類來實現自己的迭代器:
// Typical use of a nonstatic member class
public class MySet<E> extends AbstractSet<E> {
... // Bulk of the class omitted
public Iterator<E> iterator() {
return new MyIterator();
}
private class MyIterator implements Iterator<E> {
...
}
}
我做了一個測試程序,看看它們之間是否有任何區別。
public class JavaApplication7 {
public static void main(String[] args) {
// TODO code application logic here
JavaApplication7 t = new JavaApplication7();
Inner nonStaticObject = t.getAClass();
Sinner staticObject = new JavaApplication7.Sinner();
nonStaticObject.testIt();
staticObject.testIt();
}
public Inner getAClass(){
return new Inner();
}
static class Sinner{
public void testIt(){
System.out.println("I am inner");
}
}
class Inner{
public void testIt(){
System.out.println("I am inner");
}
}
}
輸出是
我內心 我內心
所以,他們也做了同樣的工作。
我不知道爲什麼非靜態類在本例中使用?