《Java匿名内部类实践》

Java匿名内部类的最佳实践:

当做实参直接传递,简洁高效。

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

        //当做实参直接传递,简洁高效。
        //匿名内部类本身就是一个对象
        f1(new IL(){
            @Override
            public void show() {
                System.out.println("匿名内部类的show方法...");
            }
        });  //要加分号,因为 f1 是一个方法

        //传统方法
        f1(new Car());
    }

    //公共静态方法,形参是IL形式,调用接口的show方法
    //注意:虽然接口不是实例化对象,但是可以创造编译类型
    public static void f1(IL il){
        il.show();
    }
}

//接口
interface IL{
    //接口中的一个方法
    void show();
}

//类 - 》 实现IL
class Car implements IL{
    @Override
    public void show() {
        System.out.println("传统方法的show方法...");
    }
}

传统方法 被称为编程领域的硬编码。

而且匿名内部类修改show方法只会影响它自己的显示。而传统方法在Car类中修改show方法,会影响到它所创建的所有的对象。

练习作业:

1)有一个铃声接口Bell,里面有一个ring方法。

2)有一个手机类Cellphone,具有闹钟功能alarmclock,参数是Bell类型

3)测试手机类的闹钟功能,通过匿名内部类作为参数,打印“起床了”。

4)在传入另一个匿名内部类对象,打印“上课了”。

代码如下:

public class InnerClassExercise02 {
    public static void main(String[] args) {
        Cellphone cellphone = new Cellphone();
        //1.传递的是一个实现了 Bell 接口的匿名内部类
        //2.重写了 ring 方法
        //3.Bell bell = new Bell() {
        //            @Override
        //            public void ring() {
        //                System.out.println("起床了");
        //            }
        cellphone.alarmClock(new Bell() {
            @Override
            public void ring() {
                System.out.println("起床了");
            }
        });
        cellphone.alarmClock(new Bell() {
            @Override
            public void ring() {
                System.out.println("上课了");
            }
        });
    }
}

interface Bell{//接口
    void ring();//方法
}

class Cellphone {//类
    public void alarmClock(Bell bell){//形参是Bell接口类型
        bell.ring(); //动态绑定 , 根据 运行类型 
    }
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值