java區域性內部類和匿名內部類的比較
阿新 • • 發佈:2018-12-26
區域性內部類和匿名內部類,具有相同的能力和作用,但區域性內部類的名字在方法外是不可見的。
那麼為什麼我們使用區域性內部類而不是匿名內部類呢? * 唯一理由是:我們需要一個命名的構造器或者需要過載構造器,而匿名內部類只能用於例項初始化. * 另一個理由:需要不止一個該內部類的物件.
程式碼測試:
interface Counter{ int next(); } public class LocalInnerClass { private int count=0; Counter getCounter(final String name){ //區域性內部類 class LocalCounter implements Counter{ public LocalCounter(){ System.out.println("LocalCounter()"); } public int next(){ System.out.println(name); return count++; } } return new LocalCounter(); } Counter getCounter2(final String name){ return new Counter() { @Override public int next() { System.out.println(name); return count++; } //匿名內部類不能有帶名字的構造器,只能有內容初始化; { System.out.println("Counter()"); } }; } public static void main(String[] args) { LocalInnerClass localInnerClass=new LocalInnerClass(); Counter c1=localInnerClass.getCounter("Local inner"), c2=localInnerClass.getCounter2("annomous class"); for(int i=0;i<7;i++){ System.out.println(c1.next()); } for(int i=0;i<7;i++){ System.out.println(c2.next()); } } }
測試結果
LocalCounter()
Counter()
Local inner
0
Local inner
1
Local inner
2
Local inner
3
Local inner
4
Local inner
5
Local inner
6
annomous class
7
annomous class
8
annomous class
9
annomous class
10
annomous class
11
annomous class
12
annomous class
13