Java 语言 除了拥有内部类以外还有一个类叫匿名内部类。匿名内部类就是指没有一个具体名称的类,这个概念是在接口和抽象类的基础上发展起来的。
new 接口名称{}
参数 | 描述 |
---|---|
new | 创建一个对象的关键字 |
接口名称 | 对应的接口名称 |
我们知道,接口是不能够创建对象的,只有其实现类才能够创建对象,所以这边在接口名称后面的代码体里面,我们需要将具体的方法实现。
我们定义一个接口
package com.haicoder.net.noinnerclass;
public interface NoInnerInterface {
public void printInfo();
}
定义一个类,用来调用接口
package com.haicoder.net.noinnerclass;
public class NoInnerClass {
public void fun1() {
this.fun2(new NoInnerInterface() {
@Override
public void printInfo() {
System.out.println("我就是传说中的匿名内部类");
}
});
}
public void fun2(NoInnerInterface noInnerInterface) {
noInnerInterface.printInfo();
}
}
创建一个测试类
package com.haicoder.net.noinnerclass;
public class NoInnerInterfaceTest {
public static void main(String[] args) {
System.out.println("嗨客网(www.haicoder.net)\n");
new NoInnerClass().fun1();
}
}
运行结果如下:
我们可以看到在测试类里面,我们调用了 fun1 的方法,fun1 中调用了 fun2 方法,fun2 里面是一个接口对象,所以重写了里面的 printInfo 方法。在 fun2 中调用了该方法,所以打印了其中的信息。
匿名内部类可以理解为将一个接口实例化,但是接口是不能被 new 的,所以我们在 new 的时候需要实现接口里面的所有的抽象方法。从而就将该 new 后面的方法块称为匿名内部类。