2)Java学习笔记:匿名内部类
2016-01-09 19:55
423 查看
为什么要使用匿名内部类
①如果以前的类有一些缺陷,只是想在某一个模块进行修复,可以在引用该类的地方使用匿名内部类,在overRide方法进行修复。②如果一个类,需要派生出很多类,而且这些类大多只是在一个特定模块去使用,是不是没有必要挨个的去创建这些子类呢。
注意事项
①使用匿名内部类时,我们必须是继承一个类或者实现一个接口,但是两者不可兼得,同时也只能继承一个类或者实现一个接口。②匿名内部类中是不能定义构造函数的, 只能用现有的父类构造器或者用初始化代码块来进行初始化。
③匿名内部类中不能存在任何的静态成员变量和静态方法。
④匿名内部类为局部内部类,所以局部内部类的所有限制同样对匿名内部类生效。
⑤匿名内部类不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法。
⑥匿名内部类只能访问所在方法用final修饰的局部变量,为了防止匿名内部类不小心修改了外部变量的引用。
匿名内部类语法
new 父类构造器(参数列表)|实现接口() { //匿名内部类的类体部分 }
Example
interface Product { long getPrice(); } abstract class Bird { private String name; public void setName(String name) {this.name = name;} public String getName() {return name;} public abstract int fly(); } public class Anonymous { public void test(String name /* must defined final that innerClass Method can access; */) { final int age = 22; Product p1 = new Product() { @Override public long getPrice() { // 只能访问用final修饰的局部变量 return age; } }; Bird p2 = new Bird() { @Override public void setName(String _name) { // compile error, name must defined final // super.setName(name); } @Override public int fly() { return 1999; } }; } public static void main(String[] args) { new Anonymous().test("human.huang"); } } 编译后目录:=》 total 40 -rw-r--r-- 1 huangjunhua staff 600 Jan 9 20:13 Anonymous$1.class -rw-r--r-- 1 huangjunhua staff 665 Jan 9 20:13 Anonymous$2.class -rw-r--r-- 1 huangjunhua staff 977 Jan 9 20:13 Anonymous.class -rw-r--r-- 1 huangjunhua staff 528 Jan 9 20:13 Bird.class -rw-r--r-- 1 huangjunhua staff 132 Jan 9 20:13 Product.class 编译后代码:=》 public void test(String name) { boolean age = true; byte ageTest = 33; System.out.println(ageTest); Product var10000 = new Product() { public long getPrice() { return 22L; } }; Bird var6 = new Bird() { public void setName(String _name) { } public int fly() { return 1999; } }; }
其实匿名内部类也生成了Anonymous$1.class和Anonymous$2.class的类文件。
相关文章推荐
- java中的匿名内部类总结
- 快速排序(java版)
- springmvc之@PathVariable注解
- springmvc之REST风格
- springmvc之@RequestParam注解
- springmvc之@RequestHeader请求头注解和@CookieValue注解
- springmvc之select原生的请求参数
- springmvc之处理模型数据之ModeAndView
- Java中的容器
- Java编码的那些事儿
- 【java报错】Unknown character set index for field '224' received from server.
- 【java报错】Unknown character set index for field '224' received from server.
- Java中的内部类
- java笔记--设计模式之观察者(订阅/发布)模式
- java 导出excel
- Java抽象类用法示例详解
- eclipse 开发web项目步骤
- 如何通过java代码解析xml文件
- Play FrameWork javax.persistence.OptimisticLockException: Data has changed.
- 获取java项目根目录的几种方法汇总