匿名内部类

 

匿名内部类必须extends类或implements接口,否则编译器不认识.它是没有类名的,在定义时显示的是它所继承的父类或  接口的名字.

一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类,没有类名,根据多态,我们使用其父类名。

例:

public class Parce16{

    public Contents cont(){

         return new Contents(){                  //匿名内部类.

             private int i = 11;

             public int value(){return i;}

         };                                                    //这里有个分号

    }

}

在匿名内部类末尾的分号,并不是用来标记内部类的结束,实际上,它标记的是表达式的结束,只不过这个表达式正巧包含了匿名类.在匿名类中不可能有命名构造器(因为它根本没有名字!),但通过实例初始化,就能够达到为匿名内部类创建一个构造器的效果.

例:

dest(final String dest,final float price){

    return new Destination(){

         private int cost;

         {                                                            //这里是一对独立的大括号表示实例初始化

             cost = Math.round(price);

             if(cost>100) System.out.println("Over budget!");

         }

         private String label = dest;

         public String readLabel(){return label;}

    };

}

对于匿名类而言,实例初始化的实际效果就是构造器.当然它受到了限制---你不能重载实例初始化方法,所以你仅有一个这样的构造器.

因其为局部内部类,那么局部内部类的所有限制都对其生效------(参看:内部类之局部变量)

当需要多个对象时使用局部内部类方可行,因为局部内部类有构造方法,可产生多个对象。匿名内部类中不能定义构造方法,它只有一个实例.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值