Java匿名内部类学习
2017-03-25 09:59
302 查看
Java匿名内部类
匿名内部类基本知识与用法匿名内部类,是一个没有类名的类,通常用在当一个继承父类或者实现接口的类只需要用一次的时候,用来简化代码编写。总结一下匿名内部类有几个基本点:
*继承父类或者实现接口或者实现抽象类
*匿名内部类用new来生成一个继承父类的对象的引用,因此可以用来作为参参数传递
*匿名内部类只能使用一次
利用代码来测试继承父类、实现接口、实现抽象类的用法
abstract class afather { public abstract void eat(); } class father { public void eat(){ System.out.println("eat person"); } } interface ifather{ public void eat(); } class Child extends father { public void eat() { System.out.println("eat child"); } } public class Test { public static void main(String[] args) { //非匿名内部类的用法 father fc = new Child(); fc.eat(); //继承父类的匿名内部类 father f = new father(){ public void eat(){ System.out.println("eat nonameinnerclass"); } }; f.eat(); //实现抽象类的匿名内部类 afather af = new afather(){ public void eat(){ System.out.println("eat afather"); } }; af.eat(); //实现接口的匿名内部类 ifather ifa = new ifather(){ public void eat(){ System.out.println("eat interface"); } }; ifa.eat(); } }
运行结果:
eat child
eat nonameinnerclass
eat afather
eat interface
利用代码测试匿名内部类作为参数传递
abstract class afathers { public abstract void eat(); } class others{ public void getafather(afathers a){ a.eat(); } } public class Test2 { public static void main(String[] args) { // 相当于传递了一个实现afathers类的子类的引用 new others().getafather( new afathers(){ public void eat(){ System.out.println("eat"); } } ); } }
一些注意事项
http://blog.csdn.net/chenssy/article/details/13170015(http://blog.csdn.net/chenssy/article/details/13170015)
在使用匿名内部类的过程中,我们需要注意如下几点:
1、使用匿名内部类时,我们必须是继承一个类或者实现一个接口,但是两者不可兼得,同时也只能继承一个类或者实现一个接口。
2、匿名内部类中是不能定义构造函数的。
3、匿名内部类中不能存在任何的静态成员变量和静态方法。
4、匿名内部类为局部内部类,所以局部内部类的所有限制同样对匿名内部类生效。
5、匿名内部类不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法。
2.内部类使用参数必须是final类型
原因:内部类并不是直接使用的外部的参数,而是编译时有自己单独的.class文件,也就是说它是拷贝了一份参数,为了避免参数改变,造成数据不一致,要求数据必须是final类型
参考:[]http://android.blog.51cto.com/268543/384844]
3.匿名内部类初始化
匿名内部类没有构造器,一般使用静态代码块来完成初始化操作。
相关文章推荐
- JAVA匿名内部类的学习
- java学习——内部类、匿名内部类
- Java基础学习总结(69)——匿名内部类与Lambda表达式
- java匿名内部类 学习笔记
- Java学习----day7——(3)匿名内部类
- Java学习心得--线程、匿名内部类
- java学习之匿名内部类与包装类
- Java基础学习总结(69)——匿名内部类与Lambda表达式
- Android(java)学习笔记75:匿名内部类的方式实现多线程程序
- java学习(9) 匿名内部类
- java学习之路----内部类之---匿名内部类
- 黑马程序员-Java学习04-接口,多态,内部类,匿名内部类,Object类
- java学习记录(四):关于匿名内部类和局部内部类只能访问final变量的问题
- java学习笔记(六)之匿名内部类
- 匿名内部类学习笔记InnerClassTest.java
- java学习笔记21——匿名内部类
- java学习笔记——匿名内部类
- java学习笔记day06---匿名内部类
- 【学习笔记15】java面向对象-匿名内部类
- java基础学习面向对象之匿名内部类 五-13