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(); //动态绑定 , 根据 运行类型
}
}