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 }
代码中将接口以及接口的实现类都写到了一块。