java中匿名内部类的使用

之前总结内部类的使用时讲过匿名内部类的使用,但讲得不够详细,这次再总结一下,方便以后复习

一.匿名内部类的创建

new 父类构造器(参数列表)| 实现接口(){
	//匿名内部类的类体部分
}

当然,这里还可以创建一个父类的引用指向匿名内部类对象

父类名|接口名 引用变量 = new 父类构造器(参数列表)| 实现接口(){
	//匿名内部类的类体部分
}

但是一般没必要这么做,第一种会更加简洁

二.匿名内部类实例

下面看四个简单例子,通过这四个例子可以对匿名内部类的写法有个全面的认识

程序一:(该例没有使用匿名内部类)

abstract class Person{
	public abstract void eat(); //抽象方法默认为public
}
class Student extends Person{
	public void eat(){
		System.out.println("eat something");
	}
}
public class AnonymousInnerClassDemo01{
	public static void main(String[] args){
		Student std = new Student();
		std.eat();
	}
}

程序二:(通过第一种方式创建匿名内部类)

abstract class Person{
	public abstract void eat(); //抽象方法默认为public
}
public class AnonymousInnerClassDemo03{
	public void print(Person p){
		p.eat();
	}
	public static void main(String[] args){
		AnonymousInnerClassDemo03 aic = new AnonymousInnerClassDemo03();
		aic.print(new Person(){
			public void eat(){
				System.out.println("eat something");
			}
		});
		
	}
}

程序三:(第一种方式的另一种写法,这种写法会创建一个类,跟程序二原理一样)

abstract class Person{
	public abstract void eat(); //抽象方法默认为public
}
class Demo{
	public void print(Person p){
		p.eat();
	}	
}
public class AnonymousInnerClassDemo04{
	public static void main(String[] args){
		Demo d = new Demo();
		d.print(new Person(){
			public void eat(){
				System.out.println("eat something");
			}
		});
		
	}
}

程序四:(通过第二种方式创建匿名内部类)


abstract class Person{
	public abstract void eat(); //抽象方法默认为public
}
public class AnonymousInnerClassDemo02{
	public static void main(String[] args){
		Person p = new Person(){
			public void eat(){
				System.out.println("eat something");
			}
		};
		p.eat();
		
	}
}

其实,程序一就是另外几个程序的拆分形式

三.匿名内部类注意点

1.使用匿名内部类我们必须要继承一个父类或者实现一个接口,当然也仅能只继承一个父类或者实现一个接口

2.匿名内部类仅能被使用一次,创建匿名内部类时它会立即创建一个该类的实例,该类的定义会立即消失,所以匿名内部类不能重复使用

3.匿名内部类不能是抽象类,所以它必须要实现它的抽象父类或者接口里面所有的抽象方法

4.匿名内部类中不能定义构造函数,但可以用构造代码块初始化

5.匿名内部类不能存在任何的静态成员变量和方法,以前的博客中也说过

参考链接:

http://blog.csdn.net/chenssy/article/details/13170015#comments

http://www.cnblogs.com/nerxious/archive/2013/01/25/2876489.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值