匿名内部类,即没有名字的内部类。正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写,用完一次即可被回收,不占用内存。
但使用匿名内部类有个前提条件:必须继承一个父类或实现一个接口,但最多只能继承一个父类,或实现一个接口,即单继承和单实现。
下面是关于类中 形参是接口类型的引用 的方法的调用
先定义一个接口,接口里面有show方法
public interface AnonymousInterface {
    /**
     * 自定义抽象方法
     */
    void show();
}
定义一个类
public class AnonymousTest {
    /**
     * 自定义静态方法实现将参数指定接口类型的引用传递出去,并调用show方法
     */
    public  static void test(AnonymousInterface anonymousInterface){
        anonymousInterface.show();
    }
}
    public static void main(String[] args) {
        //如何实现test方法的调用?????
       // AnonymousTest.test(new AnonymousInterface());    //接口不能new对象,这样写程序会报错
方法一:自定义一个实现该接口的实现类,然后创建该类对象作为实参传递
public class AnonymousInterfaceImpl implements AnonymousInterface{
    @Override
    public void show() {
        System.out.println("我是匿名内部类的实现类");
    }
}
public class AnonymousTest {
    /**
     * 自定义静态方法实现将参数指定接口类型的引用传递出去,并调用show方法
     */
    public  static void test(AnonymousInterface anonymousInterface){
        anonymousInterface.show();
    }
    public static void main(String[] args) {
        //如何实现test方法的调用?????
       // AnonymousTest.test(new AnonymousInterface());    //接口不能new对象,这样写程序会报错
        //方法一:自定义一个实现该接口的实现类,然后创建该类对象作为实参传递
        //接口不能new对象,所以要先创建一个接口的实现类
        AnonymousInterfaceImpl anonymousInterface=new AnonymousInterfaceImpl();
        //用类名.的方式调方法
        AnonymousTest.test(anonymousInterface);
        System.out.println("---------------------------------------------");
        //或者直接在形参里面new对象
        AnonymousTest.test(new AnonymousInterfaceImpl());
    }
}
运行截图

方法二:采用匿名内部类的方式实现
模板: 接口/父类类型 引用变量 = new 接口/父类类型(){方法体} ;
其本质就是采用接口类型的引用指向匿名内部类的对象
public class AnonymousTest {
    /**
     * 自定义静态方法实现将参数指定接口类型的引用传递出去,并调用show方法
     */
    public  static void test(AnonymousInterface anonymousInterface){
        anonymousInterface.show();
    }
    public static void main(String[] args) {
        //如何实现test方法的调用?????
       // AnonymousTest.test(new AnonymousInterface());    //接口不能new对象,这样写程序会报错
        //方法二:采用匿名内部类的方式实现
        //本质上就是采用接口类型的引用指向匿名内部类的对象
        AnonymousInterface anonymousInterface1=new AnonymousInterface() {
            @Override
            public void show() {
                System.out.println("匿名内部类真神奇!");
            }
        };
        test(anonymousInterface1);*/
    }
}
运行截图

方法三:使用Java8中的新特性lambda表达式的方式实现
模板: 接口 引用变量 = (参数列表)->{方法体};
 //方法三:使用Java8中的新特性lambda表达式的方式实现
        //模板:   接口 引用变量 = (参数列表)->{方法体};
        AnonymousInterface anonymousInterface2 = ()->{
            System.out.println("新特性的方式有点难");
        };
        test(anonymousInterface2);代码汇总
public class AnonymousTest {
    /**
     * 自定义静态方法实现将参数指定接口类型的引用传递出去,并调用show方法
     */
    public  static void test(AnonymousInterface anonymousInterface){
        anonymousInterface.show();
    }
    public static void main(String[] args) {
       //如何实现test方法的调用?????
       // AnonymousTest.test(new AnonymousInterface());    //接口不能new对象,这样写程序会报错
        //方法一:自定义一个实现该接口的实现类,然后创建该类对象作为实参传递
        //接口不能new对象,所以要先创建一个接口的实现类
        AnonymousInterfaceImpl anonymousInterface=new AnonymousInterfaceImpl();
        //用类名.的方式调方法
        AnonymousTest.test(anonymousInterface);
        System.out.println("---------------------------------------------");
        //或者直接在形参里面new对象
        AnonymousTest.test(new AnonymousInterfaceImpl());
       System.out.println("---------------------------------------------");
        //方法二:采用匿名内部类的方式实现
        //本质上就是采用接口类型的引用指向匿名内部类的对象
        AnonymousInterface anonymousInterface1=new AnonymousInterface() {
            @Override
            public void show() {
                System.out.println("匿名内部类真神奇!");
            }
        };
        test(anonymousInterface1);
        //方法三:使用Java8中的新特性lambda表达式的方式实现
        //模板:   接口 引用变量 = (参数列表)->{方法体};
        AnonymousInterface anonymousInterface2 = ()->{
            System.out.println("新特性的方式有点难");
        };
        test(anonymousInterface2);
    }
}
整体运行截图

码字不易,若有帮助,点个赞吧










