A:匿名內部類
就是內部類的簡化寫法
B:前提
這里的類可以是具體類也可以是抽象類
C:格式
new 類名或者接口(){ //表示繼承這個類或實現這個接口重寫方法}
D:本質是什么呢?
是一個繼承了該類或者實現了該接口的子類匿名對象
E:案例實現
按要求來寫一個匿名內部類與一個有名字的內部類進行對比要求:創建一個Inter接口,接口里面有個抽象方法print,print這個抽象方法有個輸出語句,輸出 print ,然后分別用 **有名字的內部類** 跟 **匿名內部類** 這兩種方式去實現。
一,有名字的內部類(Outer)
package Demo_nimingneibulei;public class hasming {public static void main(String[] args) {Outer o =new Outer(); //創建對象o.method(); //調用method()方法}}interface Inter{ //定義接口public void print(); //接口里面有一個print抽象方法
}class Outer{ //有名字的內部類去實現了Inter這個接口,然后重寫Inter接口里面抽象方法printclass Inner implements Inter{ //創建Inner這個類去實現Inter接口,Inner就是Inter的子類public void print(){ //重寫Inter接口里面的方法System.out.println("print");}}public void method(){
① Inner i = new Inner();i.print();② new Inner().print(); //new Inner() 代表著Inter的子類對象,然后 .print() 再調用Inner里面重寫之后的print()方法
//①②兩種方法是一樣的想過,②是①的另外一種形式
// new Inter(); //創建Inter對象,是錯誤的,因為Inter是抽象的,無法去實例化}
}
二,匿名內部類(Outer1)
package Demo_nimingneibulei;import Demo_nimingneibulei.Outer.Inner;public class Noname {public static void main(String[] args) {Outer1 o = new Outer1(); //創建Outer1該類的對象oo.method(); //調用Outer1里面的method方法}
}interface Inter1 {public void print();
}class Outer1{ //創建匿名內部類public void method(){ //匿名內部類是局部內部類的一種,所以必須寫在方法里面// new Inter(); //直接創建Inter對象,不能這樣寫,因為Inter1是個接口是抽象的,無法實例化new Inter1(){ //實現Inter接口,實現接口,必須重寫Inter1接口里面的抽象方法print()public void print(){ //重寫Inter接口里面的print抽象方法System.out.println("print");}}.print(); //.之前的內容,代表在Inter1這個接口的子類對象,然后,我們就可以調用Inter1這個接口的子類對象里面的方法了,直接.print(),去調用該方法}
//匿名內部類與有名字的內部類相比,不用再寫一個類名去實現接口或者去繼承類了
}