Java匿名内部类的最佳实践:
当做实参直接传递,简洁高效。
public class InnerClassExercise01 {public static void main(String[] args) {//当做实参直接传递,简洁高效。//匿名内部类本身就是一个对象f1(new IL(){@Overridepublic 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{@Overridepublic 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() {@Overridepublic void ring() {System.out.println("起床了");}});cellphone.alarmClock(new Bell() {@Overridepublic void ring() {System.out.println("上课了");}});}
}interface Bell{//接口void ring();//方法
}class Cellphone {//类public void alarmClock(Bell bell){//形参是Bell接口类型bell.ring(); //动态绑定 , 根据 运行类型 }
}
本文发布于:2024-01-29 17:12:30,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170651955516944.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |