java中除了内部类之外,还有一种匿名内部类,匿名内部类就是指没有一个具体名称的类,且是在接口和抽象类的应用上发展起来的。
例子:一个简单的操作
package test3;
interface A {
public void printInfo();
}
class B implements A {
public void printInfo() {
System.out.println("hello word!!");
}
}
class X {
public void fun1() {
this.fun2(new B());// 传递子类实例
}
public void fun2(A a) {// 接收接口实例
a.printInfo();
}
}
public class NoInnerClassDemo01 {
public static void main(String[] args) {
new X().fun1();// 实例化X类对象调用fun1()方法
}
}
结果:
hello word!!
但是如果接口的实现类值是哦那个一次,那么还有必要单独定义一个子类B吗?修改完代码如下:
范例:匿名内部类
package test4;
interface A {// 定义接口A
public void printInfo();// 定义抽象方法
}
class X {// 定义X类
public void fun1() {// 定义fun1()方法
this.fun2(new A() {// 匿名内部类
public void printInfo() {// 实现接口中的抽象方法
System.out.println("hello word!");
}
});
}
public void fun2(A a) {// 接收接口实例
a.printInfo();// 调用接口方法
}
}
public class NoInnerClassDemo02 {
public static void main(String[] args) {
new X().fun1();// 实例化X类对象并调用fun1()方法
}
}
结果:
hello word!!
分析:
1.直接实例化接口对象
new A(){}
是直接为接口实例化,从前面的概念应该知道,接口本身是不能直接进行实例化的,所以在接口实例化后要有一个大括号,在其中编写具体的实现方法。
实际上就是一个接口实例化对象,其中抽象方法也就实现了。