匿名类基础知识整理

来源:互联网 发布:linux查看登录密码 编辑:程序博客网 时间:2024/09/21 11:14
匿名内部类适合创建那种只需要一次使用的类,例如命令模式时所需要的Command对象。匿名内部类的语法有点奇怪,创建匿名内部类时会立即创建一个该类的实例,这个类定义立即消失,匿名内部类不能重复使用。

定义匿名内部类的格式如下:

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

从上面定义可以看出,匿名内部类必须继承一个父类,或实现一个接口,但最多只能继承一个父类,或实现一个接口。
关于匿名内部类还有如下两条规则:
1)匿名内部类不能是抽象类,因为系统在创建匿名内部类的时候,会立即创建内部类的对象。因此不允许将匿名内部类定义成抽象类。
2)匿名内部类不等定义构造器,因为匿名内部类没有类名,所以无法定义构造器,但匿名内部类可以定义实例初始化块,通过实例初始化块来完成构造器需要完成的事情。

interface Product {    public double getPrice();    public String getName();}public class TestAnonymous {    public void test(Product p) {        System.out.println("购买了一个" + p.getName() + ",花掉了" + p.getPrice());    }    public static void main(String[] args) {        TestAnonymous ta = new TestAnonymous();        ta.test(new Product() {                public double getPrice() {                    return 567;                }                public String getName() {                    return "AGP显卡";                }            });    }}

只要一个类是抽象的或是一个接口,那么其子类中的方法都可以使用匿名内部类来实现。最常用的情况就是在多线程的实现上,因为要实现多线程必须继承Thread类或是继承Runnable接口。
Thread类的匿名内部类实现:

public class Demo {    public static void main(String[] args) {        Thread t = new Thread() {                public void run() {                    for (int i = 1; i <= 5; i++) {                        System.out.print(i + " ");                    }                }            };        t.start();    }}

Runnable接口的匿名内部类实现:

public class Demo {    public static void main(String[] args) {        Runnable r = new Runnable() {                public void run() {                    for (int i = 1; i <= 5; i++) {                        System.out.print(i + " ");                    }                }            };        Thread t = new Thread(r);        t.start();    }}


0 0