1.为什么要使用匿名内部类
package com.example.testapp;
interface HelloWorld{
public void print();
}
public class NimingTest {
public static void main(String args[]){
PrintHelloWorld(new Weneed());
}
public static void PrintHelloWorld(HelloWorld hw) {//该方法实现打印内容,但是需要传入一个实现了HelloWorld接口的对象
hw.print();
}
}
class Weneed implements HelloWorld{ //新建一个类为了实现接口
@Override
public void print() {
System.out.println("Hello World");
}
}
上面的代码通过HelloWorld接口实现了输出Hello World的功能,但是为了实现接口,专门新建了一个类,而且只用了一次。
package com.example.testapp;
interface HelloWorld{
public void print();
}
public class NimingTest {
public static void main(String args[]){
PrintHelloWorld(new HelloWorld() { //由于这个内部类没有名称,所以叫匿名内部类
@Override
public void print() {
System.out.println("Hello World");
}
});
}
public static void PrintHelloWorld(HelloWorld hw) {
hw.print();
}
}
使用匿名内部类使代码更为简洁,而且也不会造成存储空间的浪费。
总的来说,当方法参数中需要传入 实现了某个接口的对象时,使用匿名内部类可以更加简便,不需要特地写一个额外的类。
2.匿名内部类的语法
匿名内部类的定义格式:
new 类名/接口/抽象类(){
//继承的方法
}
例如
new HelloWorld(){ //实际上应该是 new A implements HelloWorld(), 省略了 A implements
@Override
public void print() {
System.out.println("Hello World");
}
}