Java 中除了内部类,还有一种匿名内部类,匿名内部类就是指没有一个具体名称的类,且是在接口和抽象类的应用上发展起来的。
interface A{//定义接口A
public void printInfo();//定义抽象方法
}
class B implements A{//定义接口实现类
public void printInfo(){//覆写抽象方法
System.out.println("Hello World !!!");
}
}
class X{//定义 X 类
public void fun1(){//定义 fun1 方法
this.fun2(new B());//传递子类实例
}
public void fun2(A a){//接收接口实例
a.printInfo();//调用接口方法
}
}
public class Test{
public static void main(String[] args) {
new X().fun1();//实例化X类并调用 fun1() 方法
}
}
此时如果接口的实现类只使用一次,那么就没有必要单独定义一个子类 B,所以此时可以使用匿名内部类完成:
interface A{//定义接口A
public void printInfo();//定义抽象方法
}
class X{//定义 X 类
public void fun1(){//定义 fun1 方法
this.fun2(new A(){//匿名内部类
public void printInfo(){//实现接口中的抽象方法
System.out.println("Hello World !!!");
}
});
}
public void fun2(A a){//接收接口实例
a.printInfo();//调用接口方法
}
}
public class Test{
public static void main(String[] args) {
new X().fun1();//实例化X类并调用 fun1() 方法
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
直接实例化接口对象:
new A() {}
- 1
此时是直接为接口实例化,但是接口本身是不能直接进行实例化的,所以在接口实例化后要有一个大括号,在其中编写具体的实现方法。