深入理解Java匿名内部类

【内部类】

内部类就是将一个类定义到另一个类中,类中再嵌套一个类,所以可以划分为内部类以及外部类。

上面这种叫做成员内部类,有什么局限呢?

成员内部类可以直接访问外部类的成员变量以及成员方法。
都是外部类就不可以直接访问内部类的成员变量和成员方法。

一句话总结:外面看不到里面,里面看得到外面。

外面如果想要看到里面,需要请里面的人(是实例的,具体的对象)出来讲解内部的世界和情况。

外部类名.内部类名 对象名 = new 外部类名().new 内部类名();

【匿名内部类】

明白了内部类,下面来看看匿名内部类。

先来说说不使用匿名内部类的时候出现的问题:

我们在使用接口的时候需要分为如下4步:
1、定义子类
2、重写接口中的方法
3、创建子类对象
4、调用重写后的方法

再来看看匿名内部类的使用(前提条件:必须继承一个父类或者实现一个父接口)

new 父类名或者接口名(){
    @Override
    public void method() {}
};

匿名内部类可以作为参数进行传递。

例如:有一个接口A
匿名内部类:
A a = new A(){
  xxx方法
}
xx(a);

也可以这样写:
xx(
    new 父类名或者接口名(){
        @Override
        public void method() {}
    };
)

【内部类的使用场景】

1、内部类作用于外部类,只为外部类干活,不受其他类进行使用,是为幕后劳动者,这种情况就使用。
2、当我们的代码中有很多的非面向对象的业务代码的时候,例如判断循环语句这些很多的时候,重复不变的代码,可以专门抽取出来,然后通过内部类方式去调用。
3、多算法场合,例如我们的一个方法用来对数组排序并且依次打印各元素,对数组排序方法有很多种,用哪种方法排序交给用户自己确定。对于这样一个需求,我们很容易解决。我们决定给哪些排序算法定义一个接口,具体的算法实现由用户自己完成,只要求他实现我们的接口就行。
4、有时候我们为了让代码更加灵活以及容易扩展,就可以使用到内部类,例如:模板方法模式。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值