11.0、Java继承与多态 - 内部类的概念与分类 2_匿名内部类

11.0、Java继承与多态 - 匿名内部类

在什么情况下会用到匿名内部类呢?

        如果接口的实现类( 或者是父类的子类 )只需要使用唯一的一次;那么这种情况下就可以省略掉该类的定义(指的是实现类),而改为使用 匿名内部类 ]

        匿名内部类的定义格式:

接口名称  对象名  =  new  接口名称( ) {

        // 覆盖重写所有的抽象方法

}

用代码来实现,如下所示 ->

创建 TestService.java 接口文件 ->

public interface TestService {
    void test();
}

创建 anonymityInner.java 类,并让其创建匿名内部类,如下所示 ->

public class anonymityInner {
    public void anonymityInnerMethod() {
        TestService ts = new TestService() {
            @Override
            public void test() {
                System.out.println("实现了TestService的方法");
            }
        };
        ts.test(); //用对象调用匿名内部类中实现的方法
    }
}

在使用匿名内部类的时候请注意 ->

        匿名内部类,在创建对象时需要实现接口的抽象方法;如果想要创建多个对象,每次创建对象的时候都必须要实现接口中的所有抽象方法才可以创建一个新的对象;

        所以匿名内部类虽然说可以让我们省去一些创建实现类的麻烦,但也是建立在只创建一次对象的情况下,才比较方便;否则每次创建对象都必须要重新实现一次全部的抽象方法才可以;

        这里匿名内部类没有省略对象的名称,所以可以多次通过该对象调用匿名内部类中的方法;但是像下面的代码一样省略掉对象名,就只能调用其中的一个方法;

在匿名内部类的基础上,还可以继续省略掉匿名对象名,代码如下所示 ->

public class anonymityInner {
    public void anonymityInnerMethod() {
        new TestService() {
            @Override
            public void test() {
                System.out.println("实现了TestService的方法");
            }
        }.test();
    }
}

        这里省略了对象的名字,所以只能调用一次接口中的一个方法,如果想要多次调用接口中的方法,就不要省略掉对象的名称;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值