首先应该提出的是,匿名内部
匿名内部类何时使用较为合适?
·只用到类的一个实例。
·类在定义后马上用到。
·类非常小(SUN推荐是在4行代码以下)
·给类命名并不会导致你的代码更容易被理解。
匿名内部类的构建格式:
new 父类构造器(参数列表)|实现接口() { //匿名内部类的类体部分 }
应用举例:
public abstract class Bird { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public abstract int fly(); } public class Test { public void test(Bird bird){ System.out.println(bird.getName() + "能够飞 " + bird.fly() + "米"); } public static void main(String[] args) { Test test = new Test(); test.test(new Bird() { public int fly() { return 10000; } public String getName() { return "大雁"; } }); } } ------------------ Output: 大雁能够飞 10000米
本例子构造了一个抽象类“鸟类”,一个测试用的类“测试类”,假如我们在此使用匿名内部类的技巧,也就是以下代码
test.test(new Bird() { public int fly() { return 10000; } public String getName() { return "大雁"; } });
我们在给test方法传参时,new了一个新的类,暂时称为匿名内部类A,A是继承于鸟类的一个类,因为匿名内部类的定义,所以A除了可以自己定义特有的成员函数以外,还必须将父类,也就是鸟类的抽象成员函数fly()实现。
匿名内部类的使用限制
·匿名内部类不能有构造方法。
·匿名内部类不能定义任何静态成员、方法和类。
·只能创建匿名内部类的一个实例。
·一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。
·因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效