匿名内部类

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

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

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

posted on 2011-12-07 17:13  wangbokun  阅读(291)  评论(0编辑  收藏  举报

导航