java 局部內部類


可以在代碼塊里創建內部類,典型的方法是在一個方法體的里面創建,局部內部類不能有訪問說明符,因為它不是外圍類的一部分,但是可以訪問當前代碼塊的常量,以及此外圍類的所有成員,下面分別對局部內部類和匿名內部類進行了比較

//: innerclasses/LocalInnerClass.java
// Holds a sequence of Objects.
package object;
import static net.util.Print.*;

interface Counter {
  int next();
}    

public class LocalInnerClass {
  private int count = 0;
  Counter getCounter(final String name) {
    // A local inner class:
    class LocalCounter implements Counter { //局部內部類
      public LocalCounter() {
        // Local inner class can have a constructor
        print("LocalCounter()");
      }
      public int next() {
        printnb(name); // Access local final
        return count++;
      }
    }
    return new LocalCounter();
  }    
  // The same thing with an anonymous inner class:
  Counter getCounter2(final String name) {
    return new Counter() {  //匿名內部類
      // Anonymous inner class cannot have a named
      // constructor, only an instance initializer:
      {
        print("Counter()");
      }
      public int next() {
        printnb(name); // Access local final
        return count++;
      }
    };
  }    
  public static void main(String[] args) {
    LocalInnerClass lic = new LocalInnerClass();
    Counter
      c1 = lic.getCounter("Local inner "),
      c2 = lic.getCounter2("Anonymous inner ");
    for(int i = 0; i < 5; i++)
      print(c1.next());
    for(int i = 0; i < 5; i++)
      print(c2.next());
  }
} /* Output:
LocalCounter()
Counter()
Local inner 0
Local inner 1
Local inner 2
Local inner 3
Local inner 4
Anonymous inner 5
Anonymous inner 6
Anonymous inner 7
Anonymous inner 8
Anonymous inner 9
*///:~

局部內部類和匿名內部類都實現了這個功能, 它么具有相同的行為和能力,既然局部內部類的名字在方法外是不可見的,那為什么還要使用基本內部類呢,唯一的理由是我們需要一個已命名的構造器,或需要重構構造器,而匿名構造器只能用於實例初始化

另外一個理由是,我們需要不止一個該內部類的對象


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM