局部内部类和匿名内部类的对比
生活随笔
收集整理的這篇文章主要介紹了
局部内部类和匿名内部类的对比
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
創建內部類的典型的方式是在一個方法體的里面創建,局部內部類不能有訪問說明符,因為它不是外圍類的一部分,但是它可以訪問當前代碼塊內的常量,以及此外圍類的所有成員。下面的例子對局部內部類與匿名內部類的創建進行了比較。
具體代碼實現:
1 package thinking.in.java.demo; 2 3 //定義一個接口 4 interface Counter { 5 int next(); 6 } 7 8 // 主類LocalInnerClass 9 public class LocalInnerClass { 10 // 定義一個計數標記count; 11 private int count = 0; 12 13 // 使用局部內部類 14 Counter getCounter(final String name) { 15 class LocalCounter implements Counter { 16 public LocalCounter() { 17 System.out.println("LocalCount()"); 18 } 19 20 public int next() { 21 System.out.print(name+":"); 22 return count++; 23 } 24 } 25 // 局部內部類和匿名內部類最大的不同之處:局部內部類可以返回不止一個內部類的對象 26 // 與下面的匿名內部類的代碼形成鮮明對比 27 return new LocalCounter(); 28 } 29 30 // 使用匿名內部類 31 Counter getCounter2(final String name) { 32 return new Counter() { 33 { 34 System.out.println("Counter"); 35 } 36 37 @Override 38 public int next() { 39 System.out.print(name+":"); 40 return count++; 41 } 42 }; 43 } 44 45 /** 46 * @param args 47 */ 48 public static void main(String[] args) { 49 LocalInnerClass lic = new LocalInnerClass(); 50 // 局部內部類 51 Counter c1 = lic.getCounter("Local inner"); 52 // 匿名內部類 53 Counter c2 = lic.getCounter2("Anonymous inner"); 54 for (int i = 0; i < 5; i++) { 55 System.out.println(c1.next()); 56 } 57 for (int j = 0; j < 5; j++) { 58 System.out.println(c2.next()); 59 } 60 } 61 62 }運行結果:
LocalCount() 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在代碼中,Counter返回的是序列中的下一個值。我們分別使用局部內部類和匿名內部類是實現了這個功能,它們具有相同的行為和方法。既然局部內部類的名字在方法外是不可見的,那為什么我們仍然使用局部內部類而不是匿名內部類呢?唯一的理由是:我們需要一個已經命名的構造器,或者需要重載構造器,而匿名內部類只能用于實例的初始化,所以使用局部內部類而不使用匿名內部類的另一個理由是,需要不止一個內部類對象。
轉載于:https://www.cnblogs.com/ysw-go/p/5430218.html
總結
以上是生活随笔為你收集整理的局部内部类和匿名内部类的对比的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: andr
- 下一篇: JAVA对象转Json对象