匿名内部类:可以理解为是一种特殊的局部内部类,也是定义在方法中的。

创建匿名内部类的前提是需要一个接口或类。

格式:new 类名或接口名() {

      重写方法;

     }

使用场景:当方法的形式参数是接口或者抽象类时,可以将匿名内部类作为实际参数传递。

复制代码
public class AnonymousInnerTest {

    public static void main(String[] args) {
        // 使用接口方法的一般步骤 1、创建实现类,通过implements关键字去实现接口 2、重写方法 3、创建实现类对象 4、通过实现类对象调用重写后的方法
        InnerImpl impl = new InnerImpl();
        impl.show();

        // 匿名内部类是将实现接口或继承类,重写方法,创建实现类或继承类对象调用重写后的方法,这三个步骤放在了一起
        new Inner() {
            @Override
            public void show() {
                System.out.println("重写后的show方法。。。");
            }
            @Override
            public void show2() {

            }
        }.show();

        // 如果接口存在多个方法的话,我们需要调用多个方法时,使用接口或类接收,此时相当于父类的引用指向子类的对象(多态),然后再去调用重写方法即可。
        Inner i = new Inner() {
            @Override
            public void show() {
                System.out.println("重写后的show方法。。。");
            }

            @Override
            public void show2() {
                System.out.println("重写后的show2方法。。。");
            }
        };
        i.show();
        i.show2();
    }

}

interface Inner {
    void show();

    void show2();
}

class InnerImpl implements Inner {
    @Override
    public void show() {
        System.out.println("show方法。。。");
    }

    @Override
    public void show2() {
        System.out.println("show2方法。。。");
    }
}
复制代码

 匿名内部类作为参数传递使用:

复制代码
public class SwimmingTest {

    public static void main(String[] args) {
        goSwimming(new Swimming() {
            @Override
            public void swim() {
                System.out.println("游泳了。。。");
            }
        });
    }
  //使用接口方法
    public static void goSwimming(Swimming swimming) {
        swimming.swim();
    }
  //游泳接口
    interface Swimming {
        public void swim();
    }

}
复制代码