匿名内部类对于java初学者来说是一个难点,不过也有他的规律可循,以内部类为切入点,分析一下匿名内部类 内部类 (1)把类定义在一个类的内部。 (2)特点: A:内部类可以直接使用外部类的成员,包括私有。 B:外部类要使用内部类成员,必须创建对象使用。 (3)内部类的分类: 局部内部类:定义在方法中的内部类 成员内部类:定义在类中方法外的内部类 (4)成员内部类 class Outer { class Inner { } } 普通的修饰的时候: 外部类名.内部类名 变量 = 外部类对象.内部类对象; Outer.Inner oi = new Outer().new Inner(); class Outer { static class Inner { void method(){} } } 用静态修饰内部类时: 外部类名.内部类名 变量 = 外部类名.内部类对象 Outer.Inner oi = new Outer.Inner(); 用静态修饰内部类和方法时: Outer.Inner.method() 成员内部类: private:为了数据的安全。 static:为了方便调用。 好,以上讲解了内部类的一些知识,下面我们来分析一下匿名内部类. 匿名内部类存在的前提是:存在一个抽象类或者接口. 匿名内部类见名知意:即没有名字的内部类,但其实其本质是一个继承了类或者实现了接口的子类匿名对象。 其格式为:格式: new 抽象类或者接口() { 重写父类方法; }; 下面通过代码来解释一下匿名内部类: class Demo_Inner { public static void main(String[] args) { Out out = new Out(); out.method(); } } class Out { //外部类的普通方法 public void method() { //new 类名或者接口名(){覆盖类或者接口中的代码,(也可以自定义内容。)}; //创建一个有名字的匿名内部类对象 Fu fu = new Fu() { //定义局部内部类的成员方法 public void inMethod(){ System.out.println("匿名内部类的方法被调用了"); } }; fu.inMethod(); method2(fu); //匿名对象 同时也是内部类对象 直接调用方法 new Fu() { //定义局部内部类的成员方法 public void inMethod(){ //System.out.println("匿名内部类的方法被调用了"); } }.inMethod(); //调用参数为自定义类型的方法时,使用匿名内部类对象作为参数传递 method2(new Fu() { //定义局部内部类的成员方法 public void inMethod(){ System.out.println("匿名内部类的方法被调用了"); } }); //调用返回值为自定义类型的方法时,使用匿名内部类对象作为返回值。 Fu fu2 = method3(); fu2.inMethod(); } //自定义数据类型作为参数 public void method2(Fu fu) { fu.inMethod(); } //自定义数据类型作为返回值类型 public Fu method3() { return new Fu() { //定义局部内部类的成员方法 public void inMethod(){ System.out.println("匿名内部类的方法被调用了"); } }; } } abstract class Fu { public abstract void inMethod(); } |