匿名内部类:可以理解为是一种特殊的局部内部类,也是定义在方法中的。
创建匿名内部类的前提是需要一个接口或类。
格式: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(); } }