Java基础:【匿名内部类】是什么?

接口的使用需要一个实现类的对象,有时候只需要使用一次,那么能不能跳过实现类的定义呢?同样的,一个父类的实现有时候也需要靠子类,这个子类的定义可以省略吗?

public interface MyInterface {
    void method();
}

下面是上面接口的实现类

public class MyInterfaceImpl implements MyInterface {
    @Override
    public void method() {
        System.out.println("实现类覆盖重写了抽象方法");
    }
}

下面的main方法中,前半部分用上面写的实现类调用method方法,而后半部分用的就是一个匿名类,在{}中覆盖重写了接口中的抽象方法,而后可以直接通过接口类型的变量调用method方法。

public class Demo {
    public static void main(String[] args) {
        // 以往new实现类MyInterfaceImpl()来调用method方法
        MyInterfaceImpl myInerfaceimpl = new MyInterfaceImpl();
        myInerfaceimpl.method();
        MyInterface obj = new MyInterfaceImpl(); // 或者多态写法
        obj.method();
        // 今天学习了匿名内部类,不需要实现类
        MyInterface AnonymousObject = new MyInterface() {
            @Override
            public void method() {
                System.out.println("匿名内部类覆盖重写了抽象方法");
            }
        };
        AnonymousObject.method();
    }
}

//实现类覆盖重写了抽象方法
//实现类覆盖重写了抽象方法
//匿名内部类覆盖重写了抽象方法

格式解析:
接口名 对象名=new 接口名{…}
等号右边new代表创建对象的动作,接口名就是匿名内部类需要去实现的哪个接口的名称,{…}中是匿名内部类的内容,一般是对接口中所有抽象方法进行重写。

注意事项:

  1. 匿名内部类在创建对象的时候,只能使用唯一一次,想要再创建个对象,得整套再写一遍【 接口名 对象名2=new 接口名{…}】来获得第二个对象。
  2. 匿名内部类还可以以匿名对象的形式使用,这时候只能调用一次方法,再想用method()方法时已经找不到这个对象了,因为它是匿名的。如下代码:
  3. 匿名内部类是省略了【实现类/子类名称】,而匿名对象是省略了【对象名称】(如第2点)
        new MyInterface() {
            @Override
            public void method() {
                System.out.println("匿名内部类覆盖重写了抽象方法");
            }
        }.method();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值