【转】匿名内部类在多线程Callable中的使用小结

匿名内部类由于没有名字,所以它的创建方式有点儿奇怪。创建格式如下:
[java] view plaincopyprint?
new  父类构造器(参数列表)|实现接口()    
     {    
      //匿名内部类的类体部分    
     }  
 
        在这里我们看到使用匿名内部类我们必须要继承一个父类或者实现一个接口,当然也仅能只继承一个父类或者实现一个接口。同时它也是没有 class 关键字,这是因为匿名内部类是直接使用 new 来生成一个对象的引用。当然这个引用是隐式的。
[java] view plaincopyprint?
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()方法接受一个Bird类型的参数,同时我们知道一个抽象类是没有办法直接 new 的,我们必须要先有实现类才能 new 出来它的实现类实例。所以在mian方法中直接使用匿名内部类来创建一个Bird实例。
        由于匿名内部类不能是抽象类,所以它必须要实现它的抽象父类或者接口里面所有的抽象方法。
        对于这段匿名内部类代码其实是可以拆分为如下形式:
[java] view plaincopyprint?
public  class  WildGoose  extends  Bird{  
     public  int  fly() {  
         return  10000 ;  
     }  
       
     public  String getName() {  
         return  "大雁" ;  
     }  
}  
   
WildGoose wildGoose =  new  WildGoose();  
test.test(wildGoose);  
 
        在这里系统会创建一个继承自Bird类的匿名类的对象,该对象转型为对Bird类型的引用。
        对于匿名内部类的使用它是存在一个缺陷的,就是它仅能被使用一次,创建匿名内部类时它会立即创建一个该类的实例,该类的定义会立即消失,所以匿名内部类是不能够被重复使用。对于上面的实例,如果我们需要对test()方法里面内部类进行多次使用,建议重新定义类,而不是使用匿名内部类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值