浅谈匿名内部类
来源:互联网 发布:海地软件 编辑:程序博客网 时间:2024/06/14 21:41
一、什么是匿名内部类?
匿名内部类,顾名思义,就是没有名字的内部类
二、为什么需要匿名内部类?
我们先看一个不使用内部类的例子
abstract class Animal{ abstract void sound();// 定义一个抽象方法,代表动物会叫}class Dog extends Animal{ void sound(){ System.out.println("汪汪"); }}public class Demo{ public static void main(String[] args) { Animal a = new Dog(); a.sound(); }}
这里我们想使用Animal中的sound,就必须再写一个类去实现它。
但是如果Dog只使用一次,是不是创建一个类很麻烦?于是就有了匿名内部类。
匿名内部类的格式如下
new 父类构造器(参数列表) | 实现接口 (){ //匿名内部类的实体部分}
所以我们可以把上面的代码写成:
abstract class Animal{ abstract void sound();}public class Demo_Anonymous { public static void main(String[] args) { Animal a = new Animal(){ void sound(){ System.out.println("汪汪"); } }; a.sound(); }}
这段代码和第一段代码的效果一模一样,我们可以看出,在匿名内部类中,对内部类没有class关键字,并且这个内部类也没有名字,那段 new Animal(){ } ,其实就相当于 new Dog();Animal代表了这个无名的类的父类是谁?在Animal()后面的大括号里面实现了Animal中的抽象方法,new Animal(){ }会生成一个对象的引用,这个引用是隐式的,这个对象就是Animal的子类的实例,只不过这个子类没有名字。
所以匿名内部类可以简化代码的编写
通过上面的例子,我们对匿名内部类应该有一个大致的了解,下来我们看一下何时需要使用内部类?
① 只用到类的一个实例【因为创建一个匿名内部类时,会立即创建一个类的实例,这个类的定义会立即消失,就相当第一个例子创建Dog类的实例后Dog类的定义会消失】
② 类在定义后马上用到
③ 类非常小
那么我们在使用匿名内部类时,应该遵循什么原则呢?
① 匿名内部类不能有构造方法,因为匿名内部类没有类名,所以无法定义构造器
② 匿名内部类中不能定义任何静态成员、方法和类
③ 匿名内部类不能是抽象的,因为系统在创建匿名内部类时,会立即生成内部类对象,所以不能定义为抽象的
④ 使用匿名内部类时,我们必须继承一个类或者实现一个接口
⑤ 匿名内部类为局部内部类,所以局部内部类的所有限制同样对匿名内部类生效
- 浅谈-----匿名内部类
- 匿名内部类浅谈
- 浅谈匿名内部类
- 浅谈java的匿名内部类
- 浅谈附属类,内部类,匿名内部类,静态内部类
- 浅谈 Java中的静态内部类、匿名内部类、成员式内部类和局部内部类
- 内部类、匿名内部类
- 内部类、匿名内部类
- 内部类,匿名内部类
- 内部类(匿名内部类)
- 内部类 ---匿名内部类
- 内部类,匿名内部类
- 匿名类、内部类、匿名内部类
- 匿名类、内部类、匿名内部类
- 匿名类、内部类、匿名内部类
- 匿名类,内部类,匿名内部类
- java内部类.匿名内部类.接口.抽象类用途(浅谈一)
- 匿名内部类,回调...
- 打造H5里的“3D全景漫游”秘籍
- CUDA之Dynamic Parallelism详解(一)
- The Network Adapter could not establish the connection解决
- java代码块
- 关于c语言递增(递减)的深入理解
- 浅谈匿名内部类
- 关于java ide中报 @override 错误问题
- Java反射机制详解
- 用C#来学习唐诗三百首和全唐诗
- java对象在set属性时为什么不更新数据库
- 游戏人生----序章
- 基于Three.js的360X180度全景图预览插件
- 面试题------数值整数次方
- HTTP与HTTPS的区别