匿名内部类

接口:

1 public interface MyInterface {
2 
3     void method1(); // 抽象方法
4 
5     void method2();
6 
7 }

实现类:

 1 public class MyInterfaceImpl implements MyInterface {
 2     @Override
 3     public void method1() {
 4         System.out.println("实现类覆盖重写了方法!111");
 5     }
 6 
 7     @Override
 8     public void method2() {
 9         System.out.println("实现类覆盖重写了方法!222");
10     }
11 }

DemoMain :

 1 /*
 2 如果接口的实现类(或者是父类的子类)只需要使用唯一的一次,
 3 那么这种情况下就可以省略掉该类的定义,而改为使用【匿名内部类】。
 4 
 5 匿名内部类的定义格式 6 接口名称 对象名 = new 接口名称() {
 7     // 覆盖重写所有抽象方法
 8 };
 9 
10 对格式“new 接口名称() {...}”进行解析11 1. new代表创建对象的动作
12 2. 接口名称就是匿名内部类需要实现哪个接口
13 3. {...}这才是匿名内部类的内容
14 
15 另外还要注意几点问题16 1. 匿名内部类,在【创建对象】的时候,只能使用唯一一次。
17 如果希望多次创建对象,而且类的内容一样的话,那么就需要使用单独定义的实现类了。
18 2. 匿名对象,在【调用方法】的时候,只能调用唯一一次。
19 如果希望同一个对象,调用多次方法,那么必须给对象起个名字。
20 3. 匿名内部类是省略了【实现类/子类名称】,但是匿名对象是省略了【对象名称】
21 强调:匿名内部类和匿名对象不是一回事!!!
22  */
23 public class DemoMain {
24 
25     public static void main(String[] args) {
26 //        MyInterface obj = new MyInterfaceImpl();
27 //        obj.method();
28 
29 //        MyInterface some = new MyInterface(); // 错误写法!
30 
31         // 使用匿名内部类,但不是匿名对象,对象名称就叫objA
32         MyInterface objA = new MyInterface() {
33             @Override
34             public void method1() {
35                 System.out.println("匿名内部类实现了方法!111-A");
36             }
37 
38             @Override
39             public void method2() {
40                 System.out.println("匿名内部类实现了方法!222-A");
41             }
42         };
43         objA.method1();
44         objA.method2();
45         System.out.println("=================");
46 
47         // 使用了匿名内部类,而且省略了对象名称,也是匿名对象
48         new MyInterface() {
49             @Override
50             public void method1() {
51                 System.out.println("匿名内部类实现了方法!111-B");
52             }
53 
54             @Override
55             public void method2() {
56                 System.out.println("匿名内部类实现了方法!222-B");
57             }
58         }.method1();
59         // 因为匿名对象无法调用第二次方法,所以需要再创建一个匿名内部类的匿名对象
60         new MyInterface() {
61             @Override
62             public void method1() {
63                 System.out.println("匿名内部类实现了方法!111-B");
64             }
65 
66             @Override
67             public void method2() {
68                 System.out.println("匿名内部类实现了方法!222-B");
69             }
70         }.method2();
71     }
72 
73 }

 

posted @ 2020-12-13 22:06  Oooooooa  阅读(129)  评论(0)    收藏  举报