Java之區域性內部類和匿名內部類的區別詳解(附原始碼)
阿新 • • 發佈:2018-12-26
前言
前面提到過,可以在程式碼塊裡建立內部類,典型的方式是在一個方法體裡面建立。區域性內部類不能有訪問說明符,因為它不是外圍類的一部分;但是他可以訪問當前程式碼塊內的常量,以及此外圍類的所有成員。下面的例子對區域性內部類與匿名內部類的建立進行了比較。示例原始碼
package com.mufeng.thetenthchapter; interface Counter { int next(); } public class LocalInnerClass { private int count = 0; Counter getCounter(final String name) { class LocalCounter implements Counter { public LocalCounter() { // TODO Auto-generated constructor stub // Local inner class can have a constructor System.out.println("LocalCounter()"); } @Override public int next() { // TODO Auto-generated method stub System.out.print(name); return count++; } } return new LocalCounter(); } Counter getCounter2(final String name) { return new Counter() { // Anonymous inner class cannot have named constructor,only an // instance initializer { System.out.println("Counter()"); } @Override public int next() { // TODO Auto-generated method stub System.out.print(name); 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++) { System.out.println(c1.next()); } for (int i = 0; i < 5; i++) { System.out.println(c2.next()); } } }
輸出結果
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