java局部内部类和匿名内部类的比较

来源:互联网 发布:陕西干部网络培训网 编辑:程序博客网 时间:2024/04/30 21:23
局部内部类和匿名内部类,具有相同的能力和作用,但局部内部类的名字在方法外是不可见的。
那么为什么我们使用局部内部类而不是匿名内部类呢?* 唯一理由是:我们需要一个命名的构造器或者需要重载构造器,而匿名内部类只能用于实例初始化.* 另一个理由:需要不止一个该内部类的对象.
代码测试:
interface Counter{    int next();}public class LocalInnerClass {    private int count=0;    Counter getCounter(final String name){        //局部内部类        class LocalCounter implements Counter{            public LocalCounter(){                System.out.println("LocalCounter()");            }            public int next(){                System.out.println(name);                return count++;            }        }        return new LocalCounter();    }    Counter getCounter2(final String name){        return new Counter() {            @Override            public int next() {                System.out.println(name);                return count++;            }            //匿名内部类不能有带名字的构造器,只能有内容初始化;            {                System.out.println("Counter()");            }        };    }    public static void main(String[] args) {        LocalInnerClass localInnerClass=new LocalInnerClass();        Counter                c1=localInnerClass.getCounter("Local inner"),                c2=localInnerClass.getCounter2("annomous class");        for(int i=0;i<7;i++){            System.out.println(c1.next());        }        for(int i=0;i<7;i++){            System.out.println(c2.next());        }    }}

测试结果
LocalCounter()Counter()Local inner0Local inner1Local inner2Local inner3Local inner4Local inner5Local inner6annomous class7annomous class8annomous class9annomous class10annomous class11annomous class12annomous class13


0 0
原创粉丝点击