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

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

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

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

先定义一个接口,接口里面有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
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值