匿名内部类

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(){}

是直接为接口实例化,从前面的概念应该知道,接口本身是不能直接进行实例化的,所以在接口实例化后要有一个大括号,在其中编写具体的实现方法。

实际上就是一个接口实例化对象,其中抽象方法也就实现了。

你可能感兴趣的:(匿名内部类)