匿名内部类

      在程序当中我们对某些类的实例只使用一次,那这个类的名字对于程序而言就可有可无,在这种场景下将类的定义与类的创建放到一起完成来简化程序的编写,用这种方式定义的没有名字的类就叫做匿名内部类。
      我们创建一个抽象类命名为Person

package anorrymous;

public abstract class Person {
   
    public Person(){
    }
    public abstract void read();
}

      接下来我们再创建两个类Man和Woman分别继承抽象类Person重写read抽象方法

package anorrymous;

public class Man extends Person{
    @Override
    public void read() {
        System.out.println("男生喜欢看小说");
    }
}
package anorrymous;

public class Woman extends Person{
    @Override
    public void read() {
        System.out.println("女生喜欢看诗歌");
    }
}

      最后创建一个测试类PersonTest,我们将用两种方式实现read方法。

package anorrymous;

public class PersonTest {
    //方案1:根据传入的不同的实例对象的类型,调用相应的read方法
    public void getRead(Person person){
        person.read();
    }
    public static void main(String[] args) {
        PersonTest test=new PersonTest();
        Man one=new Man();
        Woman two=new Woman();
        test.getRead(one);
        test.getRead(two);
        //方案2:匿名内部类
        test.getRead(new Person() {
            @Override
            public void read() {
                System.out.println("男生喜欢看小说");
            }
        });
        test.getRead(new Person() {
            {
            //构造代码块
            }
            @Override
            public void read() {
                System.out.println("女生喜欢看诗歌");
            }
        });
    }
}

运行结果:

男生喜欢看小说
女生喜欢看诗歌
男生喜欢看小说
女生喜欢看诗歌

方案1是通过创建getRead方法,将Man和Woman实例化,根据传入的不同的实例对象的类型,调用相应的read方法。
方案2则是通过匿名内部类实现相同的效果。
由此可知匿名内部类在实例对象的同时,完成对象内容重写,在其中没有类型的名字,也没有这个类型实例的名字。
特点:
1.没有类型名称,没有实例对象名称
2.无法用public、private、protected、abstract、static修饰
3.无法编写构造方法,可以添加构造代码块
4.不能出现静态成员
5.匿名内部类可以实现接口,也可以继承父类,但是不能同时进行
作用: 简化对于抽象类和接口的操作。
适用场景:
1.只用到一个类的实例
2.类在定义后马上用到
3.给类命名不会导致代码更容易给理解
优点: 在某些场景对内存的损耗和系统性能的影响相对较小。
缺点: 每次使用的时候,都需要重写。

注:本篇文章仅个人见解,若有错误,欢迎指正!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值