局部内部类和匿名内部类的对比
创建内部类的典型的方式是在一个方法体的里面创建,局部内部类不能有访问说明符,因为它不是外围类的一部分,但是它可以访问当前代码块内的常量,以及此外围类的所有成员。下面的例子对局部内部类与匿名内部类的创建进行了比较。
具体代码实现:
1 package thinking.in.java.demo; 2 3 //定义一个接口 4 interface Counter { 5 int next(); 6 } 7 8 // 主类LocalInnerClass 9 public class LocalInnerClass { 10 // 定义一个计数标记count; 11 private int count = 0; 12 13 // 使用局部内部类 14 Counter getCounter(final String name) { 15 class LocalCounter implements Counter { 16 public LocalCounter() { 17 System.out.println("LocalCount()"); 18 } 19 20 public int next() { 21 System.out.print(name+":"); 22 return count++; 23 } 24 } 25 // 局部内部类和匿名内部类最大的不同之处:局部内部类可以返回不止一个内部类的对象 26 // 与下面的匿名内部类的代码形成鲜明对比 27 return new LocalCounter(); 28 } 29 30 // 使用匿名内部类 31 Counter getCounter2(final String name) { 32 return new Counter() { 33 { 34 System.out.println("Counter"); 35 } 36 37 @Override 38 public int next() { 39 System.out.print(name+":"); 40 return count++; 41 } 42 }; 43 } 44 45 /** 46 * @param args 47 */ 48 public static void main(String[] args) { 49 LocalInnerClass lic = new LocalInnerClass(); 50 // 局部内部类 51 Counter c1 = lic.getCounter("Local inner"); 52 // 匿名内部类 53 Counter c2 = lic.getCounter2("Anonymous inner"); 54 for (int i = 0; i < 5; i++) { 55 System.out.println(c1.next()); 56 } 57 for (int j = 0; j < 5; j++) { 58 System.out.println(c2.next()); 59 } 60 } 61 62 }
运行结果:
LocalCount() 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返回的是序列中的下一个值。我们分别使用局部内部类和匿名内部类是实现了这个功能,它们具有相同的行为和方法。既然局部内部类的名字在方法外是不可见的,那为什么我们仍然使用局部内部类而不是匿名内部类呢?唯一的理由是:我们需要一个已经命名的构造器,或者需要重载构造器,而匿名内部类只能用于实例的初始化,所以使用局部内部类而不使用匿名内部类的另一个理由是,需要不止一个内部类对象。
转载于:https://www.cnblogs.com/ysw-go/p/5430218.html
局部内部类和匿名内部类的对比相关推荐
- java中局部内部类_Java内部类详解--成员内部类,局部内部类,匿名内部类,静态内部类...
一.内部类基础 在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类.广泛意义上的内部类一般来说包括这四种:成员内部类.局部内部类.匿名内部类和静态内部类.下面就先来了解一 ...
- java局部内部类_Java 局部内部类、匿名内部类详解
外部类与内部类 众所周知,每个java文件必须有一个与这个java文件同名的外部类,这个外部类可以是public或default的.而除了这个同名外部类,还可以有与这个同名外部类平级的其他外部类,但它 ...
- 什么是内部类?成员内部类、静态内部类、局部内部类和匿名内部类的区别及作用?
一.什么是内部类?or 内部类的概念 内部类是定义在另一个类中的类:下面类TestB是类TestA的内部类.即内部类对象引用了实例化该内部对象的外围类对象. public class TestA{cl ...
- Java基础之-内部类(成员内部类,静态内部类,局部内部类,匿名内部类)
什么是内部类? 内部类表示的事物是外部类的一部分,内部类单独出现没有任何意义(写在一个类里面的类就叫内部类) 内部类的分类 成员内部类,静态内部类,局部内部类,匿名内部类. 什么时候用到内部类? B类 ...
- 内部类的分类:成员内部类、静态内部类、局部内部类、匿名内部类
内部类 故名思义 -- 就是在一个类A的内部定义另外一个类B,那么类A就是外部类,类B就是A的内部类. 首先需要明确: 1.内部类一定要定义在外部类的"{}"里面,而不是简单的写在 ...
- java内部类之成员内部类、局部内部类和匿名内部类
内部类概念 一个类中包含另外一个类. 分类 成员内部类. 局部内部类(包含匿名内部类). 成员内部类 定义格式: 修饰符 class 类名称 {修饰符 class 类名称 {//...}//... } ...
- 三种内部类的使用(成员内部类、局部内部类、匿名内部类)
三种内部类的使用 内部类是什么? 成员内部类 什么是成员内部类? 如何调用内部类中的public方法? 如何调用内部类中的private方法? 局部内部类 什么是局部内部类? 怎么使用局部内部类? 匿 ...
- Java的(((φ(◎ロ◎;)φ))) 实例(成 员)内部类、局部内部类、匿名内部类和静态内部类。
关于让你晕头的Java类 总结 2.细枝末节 小试牛刀 Biu~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~pia! # 梳理一下 # 前言 Java里有各种各样 ...
- 内部类(成员内部类+局部内部类+静态内部类+匿名内部类)
内部类的定义:在java中,允许在一个类的内部定义类,称为内部类,这个内部类所在的类称为外部类.内部类定义在外部内的内部,通常只服务于外部类,对于其他外部是不具备可见性的. 内部类应用场景:1.当某个 ...
最新文章
- 英国政府发人工智能深度报告,力图保持领先地位
- spring加载顺序
- 分布式--ActiveMQ 消息中间件(一) https://www.jianshu.com/p/8b9bfe865e38
- Redis中的Sentinel 验证
- IIS8托管WCF服务
- Windows环境下通过Git来管理自己的Android代码
- 工业相机和普通相机的区别详解_数码单反相机和胶片单反相机的区别
- 力扣498. 对角线遍历
- 周末生活日记|我们和楠哥
- 线程停止继续_线程不是你想中断就能中断
- 正则表达式学习笔记008--字符组简记法2
- opengl顶点数据传送和着色器处理(vao,vbo)
- swf php文本,SWFFont - PHP 5 中文文档
- 本地离线语音识别芯片哪家强
- IIS6 下的Asp.net服务器安全配置
- 盒型详解及不同浏览器兼容
- svn服务器搭建和使用_使用Gitea搭建自己的Git服务器
- 深入浅出mysql 出版社_深入浅出mysql
- md5加密算法c语言版
- Python进行灰色关联度综合评价
热门文章
- 线程----BlockingQueue
- Kubernetes集群(概念篇)
- linux下安装Oracle10g时,安装rpm文件的技巧 (rpm -Uvh package名)
- 《游戏视频主播手册》——2.2 哪些人适合做游戏主播
- 【转载】Android 关于arm64-v8a、armeabi-v7a、armeabi、x86下的so文件兼容问题
- Linux学习之CentOS(三)----将Cent0S 7的网卡名称eno16777736改为eth0
- shell 编程(难题分析)
- mvc filter 的用法
- 工作的习惯,看到好收藏下
- 部署WSE3.0实战:性能、证书与WSE910错误