栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

内部类(匿名内部类)Anonymous

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

内部类(匿名内部类)Anonymous

1.它本质上还是一个类

2.它还是一个内部类(如同内部类一样,他是定义在外部类的局部当中,方法或者代码块中)

3.它是匿名的 无名字的

4.同时它还是一个对象

 ——该图片来源自,韩顺平老师的java课

一.基于接口的匿名内部类

当我们要使用一个类的时候,要创建对象,但是当我们只是用一次的时候,这时候我们就要使用匿名内部类来简化开发

常规情况下我们调用一个基于接口的类的时候

public class AnonymousInter {
    public static void main(String[] args) {
        IA tiger = new Tiger();
        tiger.cry();

    }
}
interface IA{
     void cry();
}
class Outer01{
    private  int n1 = 10;
    public void method(){

    }
}

class Tiger implements IA{

    @Override
    public void cry() {
        System.out.println("tiger is cry");
    }
}
class Father{
    public Father() {
    }
    public void test(){

    }
}

但是当我们用类匿名内部类的方法的时候

 对比之前的调取用可以发现,在本次使用cry这个方法中我们并没用创建一个tiger类

而是直接使用了一个匿名内部类

并且对于我们所调用的这个对象tiger他的编译类型 可以看等号左边 毫无疑问就是IA这个接口,

但是它的运行类型 等号右边的那个 IA()是什么什么类型呐???

 

 这就是我们tiger.getClass()的运行结果

可以很明显的看到他的运行类型是,它的外部类的名字后面加了一个   $1  的符号

他就是我们所说的匿名内部类

 --------------------------------------------------------------------------------------------------------------------------------

并且这个匿名内部类他是系统在底层自动给分配的一个类,不能直接调用

上图中的xxxx(Outer$1)则是系统底层自动创建的匿名内部 然后将匿名内部类的地址返回给之前创建tiger对象(匿名对象只能使用一次,是一次性的,不能重复使用),但是tiger这个对象可以反复调用

二.基于类的匿名内部类

类似于基于接口的匿名内部类的创建

当然也是在jdk 底层创建的一个匿名内部类,同样是一次性使用,但是创建的对象father可以一直使用

3.基于抽象类的匿名内部类(abstract)

 三.一些细节

 

 诸多细节与局部内部类相似

四。匿名内部类的实际应用

1.可以将匿名内部类当作参数进行传递

 这样的方法省去了再单独创建一个类接口的时间,并且灵活性得到提升

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1024410.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号