1. 程式人生 > 實用技巧 >[.Net 5.0] 5.終於搞定了輸出路徑

[.Net 5.0] 5.終於搞定了輸出路徑

匿名內部類是內部類的簡寫格式,其實就是一個匿名子類物件。使用匿名內部類必須繼承或實現一個類或者介面。格式:new 父類或者介面(){子類內容};

 1 //定義匿名內部類例項一
 2 public class InnerClassDome {
 3     public static void main(String[] args)
 4     {
 5         Outer outer = new Outer();
 6         outer.method();
 7     }
 8 }
 9 
10 abstract class Demo
11 {
12     abstract
void show(); 13 } 14 15 class Outer 16 { 17 private int num = 3; 18 /*class Inner extends Demo 19 { 20 void show() 21 { 22 System.out.println("show ..."); 23 } 24 }*/ 25 public void method() 26 { 27 //new Inner().show(); 28 //下面就是匿名內部類的格式
29 new Demo() 30 { 31 @Override 32 void show() { 33 System.out.println("show ..."); 34 } 35 }.show(); 36 } 37 }

 1 //定義匿名內部類例項二
 2 public class InnerClassDome {
 3     public static void main(String[] args)
 4     {
 5         new
Outer().method(); 6 } 7 } 8 9 interface Demo 10 { 11 public abstract void show1(); 12 public abstract void show2(); 13 } 14 15 class Outer 16 { 17 public void method() 18 { 19 Demo demo = new Demo() 20 { 21 @Override 22 public void show1() { 23 System.out.println("show1 ... "); 24 } 25 26 @Override 27 public void show2() { 28 System.out.println("show2 ... "); 29 } 30 }; 31 demo.show1(); 32 demo.show2(); 33 } 34 }

使用場景

當函式引數是介面型別是,而且介面中的方法超不過三個,可以用匿名內部類作為時間引數進行傳遞。

 1 public class InnerClassDome {
 2     public static void main(String[] args)
 3     {
 4         show(new Inter() {
 5             @Override
 6             public void show1() {
 7                 System.out.println("show1 ... ");
 8             }
 9 
10             @Override
11             public void show2() {
12                 System.out.println("show2 ...");
13             }
14         });
15     }
16 
17     public static void show(Inter inter)
18     {
19         inter.show1();
20         inter.show2();
21     }
22 }
23 
24 interface Inter
25 {
26     public abstract void show1();
27     public abstract void show2();
28 }

匿名內部類細節

 1 //細節一:主函式不可呼叫非靜態的匿名內部類,想呼叫必須給匿名內部類加上static
 2 class InnerClassDemo
 3 {
 4     class Inner
 5     {
 6     }
 7         
 8     public static void main(string[] args)
 9     {
10         //new Inner();//這裡會報錯
11     }
12     
13     public void method()
14     {
15         new Inner();    
16     }
17 }

 1 //細節二:所有子類都預設繼承Object,但不能例項成一個匿名內部類
 2 //會報錯的程式
 3 class Outer
 4 {
 5     void method()
 6     {
 7         Object obj = new Object(){
 8             public void show()
 9             {
10                 System.out.println("show...");
11             }
12         };
13         obj.show();//因為匿名內部類這個子類物件被向上轉型為object型別
14                    //這樣就不能在使用子類特有的方法了.
15     }
16 }