Java之局部内部类和匿名内部类的区别详解(附源码)
2016-08-04 11:38
411 查看
前言
前面提到过,可以在代码块里创建内部类,典型的方式是在一个方法体里面创建。局部内部类不能有访问说明符,因为它不是外围类的一部分;但是他可以访问当前代码块内的常量,以及此外围类的所有成员。下面的例子对局部内部类与匿名内部类的创建进行了比较。示例源码
package com.mufeng.thetenthchapter; interface Counter { int next(); } public class LocalInnerClass { private int count = 0; Counter getCounter(final String name) { class LocalCounter implements Counter { public LocalCounter() { // TODO Auto-generated constructor stub // Local inner class can have a constructor System.out.println("LocalCounter()"); } @Override public int next() { // TODO Auto-generated method stub System.out.print(name); return count++; } } return new LocalCounter(); } Counter getCounter2(final String name) { return new Counter() { // Anonymous inner class cannot have named constructor,only an // instance initializer { System.out.println("Counter()"); } @Override public int next() { // TODO Auto-generated method stub System.out.print(name); return count++; } }; } public static void main(String[] args) { LocalInnerClass lic = new LocalInnerClass(); Counter c1 = lic.getCounter("Local inner "), c2 = lic.getCounter2("Anonymous inner "); for (int i = 0; i < 5; i++) { System.out.println(c1.next()); } for (int i = 0; i < 5; i++) { System.out.println(c2.next()); } } }
输出结果
LocalCounter() Counter() Local inner 0 Local inner 1 Local inner 2 Local inner 3 Local inner 4 Anonymous inner 5 Anonymous inner 6 Anonymous inner 7 Anonymous inner 8 Anonymous inner 9
源码解析
Counter返回的是序列中的下一个值。我们分别使用局部内部类和匿名内部类实现了这个功能,它们具有相同的行为和能力。既然局部内部类的名字在方法外是不可见的,那为什么我们仍然使用局部内部类而不是匿名内部类呢?唯一的理由是,我们需要一个已命名的构造器,或者需要重载构造器,而匿名内部类只能用于实例初始化。所以使用局部内部类而不使用匿名内部类的另一个理由就是,需要不止一个该内部类的对象。
相关文章推荐
- Java 内部类(分四种:成员内部类、局部内部类、静态内部类和匿名内部类)
- java局部内部类和匿名内部类的比较
- Java 内部类(成员内部类、局部内部类、静态内部类和匿名内部类)
- Java 内部类(成员内部类、局部内部类、静态内部类和匿名内部类)
- java中break和continue的区别详解(附源码)
- JAVA中内部类和匿名内部类的区别,分别在什么时候使用它们?
- Java之内部类与向上转型详解(附源码)
- Java 内部类详解(成员内部类、静态内部类、局部内部类、匿名内部类)
- 详解java中的抽象类和接口的区别
- java内部重定向死循环检测详解【附源码】
- java匿名类与内部类的一个例子【区别这两者的区别】
- java之public class和class声明区别详解
- 实训java第十三课 内部类 匿名内部类 局部内部类 静态内部类 集合LinkedList
- 详解Java中Cookie与Session的区别
- java中的内部类详解和应用
- 详解Java中抽象类和接口的区别
- 详解java中的抽象类和接口的区别
- 详解java中的抽象类和接口的区别-isp(接口分离原则)——巨龙面试题
- 详解java中的抽象类和接口的区别
- Java中int和Integer的区别详解