内部类——匿名内部类

 1 /*
 2 1.内部类:在类的内部又定义了一个新的类。被称为内部类。
 3 
 4 2.内部类的分类:
 5     静态内部类:类似于静态变量
 6     实例内部类:类似于实例变量
 7     局部内部类:类似于局部变量
 8 
 9 3.使用内部类编写的代码,可读性很差,能不用尽量不用。
10 
11 4.匿名内部类是内部类的一种。
12     因为这个类没有名字而得名,叫做匿名内部类。
13 
14 5.学习匿名内部类主要是为了以后再阅读别人代码的时候,能够理解。
15 并不代表以后就得这样写。匿名内部类有两个缺点:
16     缺点1:太复杂,太乱,可读性差
17     缺点二:没有名字,不能重复使用
18 */
19 public class Test01 {
20     // 静态变量
21     static String country;
22 
23     // 该类在类的内部,所以称为内部类
24     // 由于前面有static,所以称为“静态内部类”
25     static class Inner1 {
26     }
27 
28     // 该类在类的内部,所以称为内部类
29     // 没有static叫做实例内部类
30     class Inner2 {
31     }
32 
33     // 方法
34     public void doSome() {
35         // 局部变量
36         int i = 100;
37         // 该类在类的内部,所以称为内部类
38         // 局部内部类。
39         class Inner3 {
40         }
41     }
42 
43     public void doOther() {
44         // doSome()方法中的局部内部类Inner3,在doOther()中不能用。
45     }
46 
47     public static void main(String[] args) {
48         MyMath mm = new MyMath();
49         Compute cc = new ComputeImpl();
50         mm.mySum(cc, 100, 200);
51         // 使用匿名内部类,表示这个ComputeImpl这个类没有名字了。
52         //这里表面看上去好像是接口可以直接new了,实际上并不是接口可以new了。
53         //后面的{}代表了对接口中方法的实现。
54         mm.mySum(new Compute() {
55 
56             @Override
57             public int sum(int a, int b) {
58                 // TODO Auto-generated method stub
59                 return a + b;
60             }
61         }, 200, 300);
62     }
63 }
64 
65 // 负责计算的接口
66 interface Compute {
67     // 抽象方法
68     int sum(int a, int b);
69 }
70 
71 // Compute接口的实现类
72 class ComputeImpl implements Compute {
73     public int sum(int a, int b) {
74         return a + b;
75     }
76 }
77 
78 // 数学类
79 class MyMath {
80     // 数学求和方法
81     public void mySum(Compute c, int x, int y) {
82         int retValue = c.sum(x, y);
83         System.out.println(x + "+" + y + "=" + retValue);
84     }
85 }

代码中将接口以及接口的实现类都写到了一块。

posted @ 2020-05-20 16:35  1998青年  阅读(148)  评论(0编辑  收藏  举报