和接口有关的匿名类
假设Computable是一个接口,那么,Java允许直接用接口名和一个类体创建一个匿名对象,此类体被认为是实现了Computable接口的类去掉类声明后的类体,称作匿名类。下列代码就是用实现了Computable接口的类(匿名类)创建对象。
new Computable(){
实现接口的匿名类的类体
}
如果某个方法的参数是接口类型,那么可以使用接口名和类体组合创建一个匿名对象传递给方法的参数,类体必须要重写接口中的全部方法。例如,对于void f(Computable x),其中的参数x是接口,那么在调用f时,可以向f的参数x传递一个匿名对象,如: f(new Computable({实现接口的匿名类的类体})。
在下面的例子3中,演示了和接口有关的匿名类的用法,运行效果如图所示。
interface SpeakHello {
void speak();
}
class HelloMachine {
public void turnOn (SpeakHello hello) {
hello.speak();
}
}
public class Example5_4{
public static void main(String args[]) {
HelloMachine machine = new HelloMachine();
machine.turnOn( new SpeakHello() { //和接口 SpeakHello有关的匿名类
public void speak() {
System.out.println("hello,you are welcome!");
}
}
);
machine.turnOn( new SpeakHello() { //和接口 SpeakHello有关的匿名类
public void speak() {
System.out.println("你好,欢迎光临!");
}
}
);
}
}
运行结果: