黑马程序员_Java匿名内部类的应用
来源:互联网 发布:软件著作权 代码格式 编辑:程序博客网 时间:2024/06/05 03:37
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
听老师说Android里匿名内部类很常用,在做APP时,对各种事件的监听,例如点击、拖拽、按下松开等都需要用匿名内部类。所以匿名内部类一定要好好掌握!
Java 语言中,类的定义可以相互嵌套,即在一个类的定义中嵌套定义另一个类,被嵌套在内部的类称为内部类,匿名内部类就是没有名字的内部类。由于无名可用,所以不可能用匿名类声明对象,却可以直接用匿名类创建一个对象。Java 匿名内部类是在接口和抽象类的应用上发展起来的,所以匿名内部类的声明要么是基于继承的,要么是基于实现接口的。
/* 匿名内部类,没有类名 使用匿名内部类,前提,有继承父类,或者实现接口 匿名内部类,只能写方法中 匿名内部类,是一种简化形式,简化的是,类继承类或者实现接口,重写抽象方法,建立子类对象 格式 new 父类或者接口{ 重写抽象方法 }.抽象方法*/interface MyInter{ public abstract void show();}class MyInterImpl implements MyInter{ public void show(){ }}/* 以上代码,是实现类,实现接口,重写方法 main中建立实现类对象 MyInterImpl my = new MyInterImpl(); my.show(); 使用匿名内部类,对以上代码进行简化,一步完成*/class Outer{ public void outer(){ //使用匿名内部类,实现接口,重写方法,建立对象,调用重写方法,一步实现 new MyInter(){ public void show(){ System.out.println("匿名内部类重写方法show"); } }.show(); //以上从new开始,到分号结束,叫做匿名内部类 //看成是接口MyInter的实现类,并且还创建出实现类对象 }}class NiMingDemo{ public static void main(String[] args) { Outer o = new Outer(); o.outer(); //System.out.println("Hello World!"); }}
以上代码成功使用了匿名内部类调用了重写的接口中的方法,但是如果我地接口中有两个抽象方法呢?该怎么调用?
有人说把代码复制一下,在调用另一个方法不就好了。
可是这样做在编译后会产生两个内部类对象,怎么用一个匿名内部类调用2个方法呢?
/* 匿名内部类,简化实现类的书写*/interface MyInter{ public abstract void show(); public abstract void show2();}class Outer{ public void outer(){ //下面new开始,都是接口的实现类对象。多态 //接口引用指向自己的实现类对象==实现类是一个匿名内部类 MyInter my = new MyInter(){ public void show(){ System.out.println("匿名内部类,重写show方法"); } public void show2(){ System.out.println("匿名内部类,重写show2....方法"); } }; my.show(); my.show2(); }}class NiMingDemo1 { public static void main(String[] args) { new Outer().outer(); }}
没错,答案就是多态调用。
用接口引用指向自己的实现类对象(实现类是一个匿名内部类)。
0 0
- 黑马程序员_Java匿名内部类的应用
- 黑马程序员_java的面向对象(对第八课多态..内部类..匿名内部类的总结)
- 黑马程序员_java内部类
- 黑马程序员_java内部类
- 黑马程序员_java 内部类
- 黑马程序员_java内部类
- 黑马程序员_java内部类
- 黑马程序员_Java内部类
- 黑马程序员_JAVA:内部类
- 黑马程序员_JAVA基础_内部类,匿名内部类,异常
- 黑马程序员_日记6_Java内部类与匿名内部类
- 黑马程序员_java语言_内部类和匿名内部类
- 黑马程序员 匿名内部类
- 黑马程序员 匿名内部类
- 黑马程序员 匿名内部类
- 黑马程序员--匿名内部类
- 黑马程序员------------------匿名内部类
- 黑马程序员----匿名内部类
- 再探java基础——break和continue的用法
- 机器学习为什么要学习最优化呢?
- 使用Python写的第一个网络爬虫程序
- 时间序列 SPSS
- Google MapReduce
- 黑马程序员_Java匿名内部类的应用
- poj 3264 Balanced Lineup (线段树)
- 怎么样把CDC上的一个图保存为bmp格式的图
- opengl中使用顶点数组的方法
- HaLoop—适用于迭代计算的Hadoop
- redhat6配置yum源
- Golang与C对比学习 (1)
- 使用imagick制作简单渐变文字
- TinyOS01:无线传感网络(WSNs)相关概念介绍