/*
如果接口的實現類(或者是父類的子類),只需要使用唯一的一次
那么這種情況下就可以省略掉該類的定義,而改為使用【匿名內部類】
匿名內部類的定義格式:
接口名稱 對象名 = new 接口名稱(){
//覆蓋重寫所有抽象方法
};
對格式“new 接口名稱(){...}”進行解析
1.new代表創建對象的動作
2.接口名稱就是匿名內部類需要實現哪個接口
3.{...}才是匿名內部類的內容
另外還要注意幾個問題
1.匿名內部類,在創建對象的時候,只能創建唯一一個
如果希望多次創建對象,而且類的內容一樣化,就必須使用單獨定義的實現類了。(或者多次創建)
2.匿名對象,在【調用方法的時候】只能調用唯一一次。
如果希望同一個對象調用多個方法,那么對象必須取個名字(或者多次調用)
3.匿名內部類是省略了【實現類/子類名稱】,匿名對象省略了【對象名稱】
強調:匿名內部類和匿名對象名稱不是一回事
public class DemoMain { public static void main(String[] args) { // MyInterface obj = new MyInterfaceImpl(); // obj.method(); // MyInterface obj = new MyInterface(); //使用匿名內部類,但不是匿名對象,對象名稱就叫objA MyInterface objA = new MyInterface(){ public void method(){ System.out.println("匿名內部類實現了方法__"); } public void method2(){ System.out.println("匿名內部類實現了方法222__"); } }; objA.method(); objA.method2(); System.out.println("=================="); //使用了匿名內部類,而且省略了匿名對象名稱,也是匿名對象 new MyInterface() { @Override public void method() { System.out.println("匿名內部類實現了方法__b"); } public void method2(){ System.out.println("匿名內部類實現了方法222__b"); } }.method(); //因為匿名對象無法調用第二次方法,需要在創建匿名內部類的匿名對象 new MyInterface() { @Override public void method() { System.out.println("匿名內部類實現了方法__b"); } public void method2(){ System.out.println("匿名內部類實現了方法222__b"); } }.method2(); } }
接口
public interface MyInterface { public abstract void method();//抽象方法 public abstract void method2(); }
轉自B站