Java之局部内部类和匿名内部类的区别详解(附源码)
来源:互联网 发布:c 编程例子 编辑:程序博客网 时间:2024/06/05 00:56
前言
前面提到过,可以在代码块里创建内部类,典型的方式是在一个方法体里面创建。局部内部类不能有访问说明符,因为它不是外围类的一部分;但是他可以访问当前代码块内的常量,以及此外围类的所有成员。下面的例子对局部内部类与匿名内部类的创建进行了比较。
示例源码
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 constructorSystem.out.println("LocalCounter()");}@Overridepublic int next() {// TODO Auto-generated method stubSystem.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()");}@Overridepublic int next() {// TODO Auto-generated method stubSystem.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 0Local inner 1Local inner 2Local inner 3Local inner 4Anonymous inner 5Anonymous inner 6Anonymous inner 7Anonymous inner 8Anonymous inner 9
源码解析
Counter返回的是序列中的下一个值。我们分别使用局部内部类和匿名内部类实现了这个功能,它们具有相同的行为和能力。既然局部内部类的名字在方法外是不可见的,那为什么我们仍然使用局部内部类而不是匿名内部类呢?唯一的理由是,我们需要一个已命名的构造器,或者需要重载构造器,而匿名内部类只能用于实例初始化。
所以使用局部内部类而不使用匿名内部类的另一个理由就是,需要不止一个该内部类的对象。
3 0
- Java之局部内部类和匿名内部类的区别详解(附源码)
- java局部内部类和匿名内部类的比较
- java的内部类、匿名内部类、局部内部类
- Java内部类详解 及 局部内部类和匿名内部类只能访问局部final变量的原因
- Java 内部类详解(成员内部类、静态内部类、局部内部类、匿名内部类)
- Java 内部类(成员内部类、局部内部类、静态内部类和匿名内部类)
- Java 各种内部类(成员内部类、局部内部类、静态内部类和匿名内部类)
- Java 内部类(分四种:成员内部类、局部内部类、静态内部类和匿名内部类)
- Java 内部类(成员内部类、局部内部类、静态内部类和匿名内部类)
- Java内部类(成员内部类、局部内部类、静态内部类、匿名内部类)
- Java内部类总结之局部内部类和匿名内部类
- Java内部类和匿名内部类的区别
- 成员内部类、局部内部类、静态内部类和匿名内部类区别
- 成员内部类.局部内部类.静态内部类.匿名内部类的区别
- java内部类之私有内部类、局部内部类、匿名内部类
- Java静态内部类、匿名内部类、成员式内部类和局部内部类
- java成员内部类、局部内部类、静态内部类和匿名内部类
- Java静态内部类、匿名内部类、成员式内部类和局部内部类
- Hadoop WritableComparator RawComparator
- win7企业版+vs2015社区版+opencv3.10
- Layer-Springs
- POJ2485Highways(Kruskal算法)
- css3实现底部弧形阴影以及翘边阴影
- Java之局部内部类和匿名内部类的区别详解(附源码)
- 基于Asp.net将excel保存到服务器
- 语义分析的一些方法(二)
- ABAP MIR7预制凭证BAPI
- Android Studio 混淆代码 [记录通用]
- 公开密钥体系
- 在2016年必火的这些 Android 技术
- centos7 下 安装 tengine
- 安卓 锁屏方式及密码锁