匿名内部类
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(){}
是直接为接口实例化,从前面的概念应该知道,接口本身是不能直接进行实例化的,所以在接口实例化后要有一个大括号,在其中编写具体的实现方法。
实际上就是一个接口实例化对象,其中抽象方法也就实现了。