0
点赞
收藏
分享

微信扫一扫

Java中关于匿名内部类的代码测试

秀妮_5519 2022-02-16 阅读 94

匿名内部类,即没有名字的内部类。正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写,用完一次即可被回收,不占用内存。

但使用匿名内部类有个前提条件:必须继承一个父类或实现一个接口,但最多只能继承一个父类,或实现一个接口,即单继承和单实现。

下面是关于类中 形参是接口类型的引用 的方法的调用

先定义一个接口,接口里面有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);



    }
}

整体运行截图

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

举报

相关推荐

0 条评论