局部内部类对外部属性和变量的访问测试
2015-07-31 22:41
531 查看
package test; /** * * 局部内部类能不能访问外围方法或者属性的值 ? * * 局部内部类可以访问属性 ,但是不能访问非final的局部变量 * */ public class Test1 { private String attribute ; public void f(){ final String localAttribute = "" ; class InnerClass { public InnerClass(){ System.out.println("attribute " + attribute ); attribute = attribute + "" ; //Cannot refer to //the non-final local variable localAttribute //defined in an enclosing scope System.out.println("localAttribute " + localAttribute ); localAttribute = localAttribute + "" ; } } } } /** * 测试任意代码块中的内部类访问属性和局部变量 */ class TestIfLocalClass { private String attribute ; public TestIfLocalClass(){ final String localAttribute = "" ; if(true){ class IfLocalClass { public IfLocalClass(){ System.out.println(attribute); attribute = attribute + "" ; System.out.println(localAttribute); localAttribute = localAttribute + "" ; } } } } } /** * 测试匿名内部类对外围属性和本地变量的访问 */ interface TestAnonymousClass{ public void f() ; } class TestAClass{ private String attribute ; public TestAnonymousClass f(){ final String localAttribute = "" ; return new TestAnonymousClass(){ @Override public void f() { System.out.println(attribute); attribute = attribute + "" ; System.out.println(localAttribute); localAttribute = localAttribute + "" ; } } ; } }
通过上面的测试可得,局部内部类能够访问和修改外部类的属性但是不能访问非final修饰的局部变量,可以访问final修饰的局部变量但是不能修改其值。
相关文章推荐
- 黑马程序员——走进面向对象
- Redis数据类型之字典
- 直接用socket实现HTTP下载
- JavaScript--时间显示小插件
- Go语言练习:go语言与C语言的交互——cgo
- Android大图片裁剪终极解决方案(下:拍照截图)
- objectiveC【语法】修饰符 static extern const
- Nginx常用命令介绍
- Oracle 学习之RMAN(十六)Catalog
- 我的书单
- Android Service与Activity之间通信的几种方式(1)---通过broadcast(广播)的形式
- Nginx学习总结
- 把握linux内核设计思想(十):内核同步
- web——测试方法总结
- ╮(╯▽╰)╭ 数蚂蚁
- nginx源码分析(1)- 缘起
- 课堂小计
- GO语言练习:反射
- Golang 简介及配置
- Android大图片裁剪终极解决方案(中:从相册截图)