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

本文介绍了Java中匿名内部类的概念及创建方式,展示了如何通过继承抽象类并实现其抽象方法来创建匿名内部类实例,并对比了匿名内部类与普通类的区别。
匿名内部类由于没有名字,所以它的创建方式有点儿奇怪。创建格式如下:
[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、付费专栏及课程。

余额充值