匿名内部类

匿名内部类,没有名字的内部类。可以是实体类,也可以是接口。

public  class  Demo {
     public  static  void  main(String[] args) {
         Person p =  new  Person() {
             public  void  eat() {
                 System.out.println( "eat something" );
             }
         };
         p.eat();
     }
}
像这样在new person()的后边直接写方法,其实就是新生成了一个类,但是没有名字,可以把它当成  newperson extends person,newperson就是假设的类名(实际是没有名字的)。注意;匿名内部类的结尾会有一个分号   ;

下述代码也是匿名内部类

return new Contents() {
private int i = 11;
public int value() { return i; }
};
这两段代码可以认为是一个意思
class MyContents extends Contents {
private int i = 11;
public int value() { return i; }
}
return new MyContents();
若试图定义一个匿名内部类,并想使用在匿名内部类外部定义的一个对象,则编译器要求外部对象为final属性。假如需要采取一些类似于构建器的行动。假如需要采取一些类似于构建器的行动,我们可以在实例初始化模块中,一个实例初始化模块就是一个匿名内部类的构建器。

下属代码,匿名内部类使用的dest,price必须是final的。{}中包起来的是一个实例初始化模块,但是他是在匿名内部类中,实例初始化模块实在类new新对象的时候才走,匿名内部类无法new对象,因此没起到类初始化模块。但是在匿名内部类里会走实例初始化模块,就起到了构建器的作用。

public class Parcel9 {
public Destination
dest(final String dest, final float price) {
return new Destination() {
private int cost;
// Instance initialization for each object:
{
cost = Math.round(price);
if(cost > 100)
System.out.println("Over budget!");
}
private String label = dest;
public String readLabel() { return label; }
};
}
public static void main(String[] args) {
Parcel9 p = new Parcel9();
Destination d = p.dest("Tanzania", 101.395F);
}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值