[.Net 5.0] 5.終於搞定了輸出路徑
阿新 • • 發佈:2020-11-13
匿名內部類是內部類的簡寫格式,其實就是一個匿名子類物件。使用匿名內部類必須繼承或實現一個類或者介面。格式: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 abstractvoid 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 newOuter().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 }