博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
匿名内部类Anonymous Classes
阅读量:2352 次
发布时间:2019-05-10

本文共 1910 字,大约阅读时间需要 6 分钟。

匿名内部类没有具体的类名也没有class关键字,因为匿名内部类是直接使用new来生成一个对象的引用。创建匿名内部类时会立即创建一个该类的实例,该类的定义会立即消失,就像一个表达式,对于只会使用一次的局部类的场景可以用匿名类来代替

一般匿名内部类创建模版

Outer outer = new Outer(args) {
//匿名内部类的类体部分 }//e.g.public class AnonymousClasses {
interface HelloWorld {
public void greet(); public void greetSomeone(String someone); } public void sayHello() {
//局部类 class EnglishGreeting implements HelloWorld {
String name = "world"; public void greet() {
greetSomeone("world"); } public void greetSomeone(String someone) {
name = someone; System.out.println("Hello " + name); } } HelloWorld englishGreeting = new EnglishGreeting(); //匿名类 HelloWorld frenchGreeting = new HelloWorld() {
String name = "tout le monde"; public void greet() {
greetSomeone("tout le monde"); } public void greetSomeone(String someone) {
name = someone; System.out.println("Salut " + name); } }; englishGreeting.greet(); frenchGreeting.greetSomeone("Fred"); } }

在上述例子中,创建的类只需要一个实例frenchGreetingfrenchGreeting,由于每个类只需使用一次,如果都新建一个类会难以管理,因此可以使用匿名类。匿名类经常使用在多线程中,使用多线程时,一般先继承Thread类或者实现Runnable接口,然后再去调用它的方法,而每个任务一般都不一样,每次都新建一个类显然会很复杂。

注意:

  • 匿名类必须是继承一个类或者实现一个接口,并且只能继承一个类或者实现一个。匿名类不能是抽象类,必须实现父类或者接口的所有抽象方法
  • 匿名类可以访问外部其封闭类的成员,但无法访问那些不是final或者effectively final的局部变量
  • 对于匿名类中的成员,匿名类具有跟局部类相同的限制
  • 匿名类中的声明的类型变量,会覆盖掉外部区域中的同名的变量
  • 不能在匿名类中声明静态代码块、静态成员(除非是常量)与静态方法

匿名内部类初始化法

第一层花括号定义了一个继承于HashMap的匿名内部类
第二层花括号实际上是这个匿名内部类实例初始化块(或称为非静态初始化块)
通过new得到这个HashMap的子类的实例并向上转型为HashMap的引用,但功能上与HashMap没有任何区别

HashMap map = new HashMap(); //创建实例对象HashMap map = new HashMap(){
{
put("A",1); put("B",2); }};

转载地址:http://dfqvb.baihongyu.com/

你可能感兴趣的文章
linux之LVM操作案例
查看>>
由于CentOS的系统安装了epel-release-latest-7.noarch.rpm 导致在使用yum命令时出现Error: xz compression not available问题。
查看>>
php中抽象类和接口的概念与区别
查看>>
php抽象类和接口
查看>>
如何在linux CentOS 上安装chrome 谷歌浏览器
查看>>
laravel5 怎么实现事务
查看>>
GitLab安装说明
查看>>
Git查看、删除、重命名远程分支和tag
查看>>
PHP类中的抽象类,抽象方法,abstract
查看>>
PHP接口类interface的正确使用方法
查看>>
Sencha Touch之Hello World
查看>>
Tab Layout 之单个Activity实现
查看>>
Tab Layout 之多个Activity实现
查看>>
FrameLayout之我见
查看>>
个人解读Activity之一
查看>>
实现自定义布局的Notification
查看>>
AlarmManager的学习与实现
查看>>
解读Content Provider之一
查看>>
解读Content Provider之二
查看>>
自定义UI实例
查看>>