匿名内部类作为参数传递和返回怎么实现?

接口或者抽象类的匿名对象,都可以作为参数传递,达到调用方法的目的:
具体实现代码如下:

public class Parameter {
    public static void main(String[] args) {
        display(new Test() {//把匿名内部类作为参数传递,可以直接重写抽象类中的方法;
            @Override
            public void show() {
                System.out.println("重写过的show方法:");
            }
        });

        System.out.println("-----------------------------------");
       Test2 test2= new Test2(){ //可以利用多态,将匿名对象指向test2;
            @Override
            public void show1() {
                System.out.println("重写过的show1方法:");
            }
        };
       display2(test2); //通过参数传递,也可以达到调用目的;


    }

    public static  void  display(Test test) {//设置为静态方法,进入主函数后就可以直接调用了;
        test.show();
    }

    public  static  void display2(Test2 test2) {
        test2.show1();
    }
}

abstract class Test {//抽象类;
    public abstract void show();
}

interface Test2 {//接口类;
    public abstract void show1();
}

同样,匿名对象也可以作为参数返回:
具体实现如下:


public class Parameter {
    public static void main(String[] args) {

        Test test=getTest();//接收返回回来的抽象类匿名对象,并调用重写过的方法;
        test.show();
        System.out.println("================================");
        Test2 test2=getTest2();//接收返回回来的接口类匿名对象,并调用重写过的方法;
        test2.show1();
    }
    public static Test  getTest(){//创建方法,将抽象类匿名对象作为参数返回;
        Test test=new Test() {
            @Override
            public void show() {
                System.out.println("重写过的show方法");
            }

        };
        return  test;
    }
    public static Test2 getTest2(){//创建方法,将接口类匿名对象作为参数返回;
        Test2 test2=new Test2() {
            @Override
            public void show1() {
                System.out.println("重写过的show1方法");
            }

        };
        return  test2;
    }

}

abstract class Test {//抽象类;
    public abstract void show();
}

interface Test2 {//接口类;
    public abstract void show1();
}
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Lambda 表达式和匿名内部类都是 Java 中用于创建短小、简洁的代码块,通常用作函数式接口(只有一个抽象方法)的实现。它们的主要区别在于: 1. **语法简洁性**: - **Lambda 表达式**:使用 `->` 运算符将参数列表和方法体直接连接,使得代码更加紧凑。例如,`x -> x * x` 表示接受一个参数并返回其平方的函数。 - **匿名内部类**:需要定义一个完整的类,尽管这个类可能只包含一个方法。例如,`new Runnable() { public void run() { ... } }`。 2. **类型推断**: - **Lambda 表达式**:编译器通常能够推断出 lambda 表达式的类型,特别是对于单方法接口,这提供了更灵活的使用。 - **匿名内部类**:如果方法体中有明确的类型声明,或者方法返回值不是 final,需要显式指定类型。 3. **可读性**: - **Lambda 表达式**:由于其简洁的语法,可能更容易理解。 - **匿名内部类**:对于复杂的类结构或多个方法,匿名内部类可能显得冗长。 4. **作用域和生命周期**: - **Lambda 表达式**:在方法调用结束时自动销毁,除非存储在引用中。 - **匿名内部类**:具有独立的生命周期,可以作为对象实例存在,直到垃圾回收。 5. **应用场景**: - **Lambda 表达式**:适合用于函数式编程风格,如 Java 8 中的 Stream API 和集合框架的操作。 - **匿名内部类**:更适合需要对象实例的场景,比如事件监听或作为构造函数的参数传递
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值