匿名内部类

匿名内部类走一波

匿名内部类,听一下名称就知道它很惨,没有名字(引用数据类型)
但就是因为这样他可以更加节省空间,不需要名称,也可以很好的解决我们的需求,可
以作为方法的参数直接使用,在jdk1.8 以后可以很好的用lambdas表达式来实现替代,
就让我们在代码中来看一下怎么使用吧!

/**
 * Abstract抽象类
 */
abstract class AbstractTypeA {
    abstract public void testA();
}

/**
 * 自定义类继承一个Abstract修饰的类,需要完成在abstract类内的所有abstract方法
 */
class WuYun extends AbstractTypeA {
    @Override
    public void testA() {
        System.out.println("继承Abstract类,实现类内的abstract方法");
    }
}

public class Demo1 {
    public static void main(String[] args) {
        WuYun wuYun = new WuYun();
        wuYun.testA();

        /*
        使用抽象类的引用指向一个匿名内部类的对象
        在当前大括号内,是一个类,继承abstract修饰的类,必须完成的代码
        也就是一个【类的本体】,但是当前这个大括号没有对应的类名,所以是
        一个匿名内部类,这里借助抽象类的名字,来创建一个【继承】于抽象类
        的子类对象,也就是
        【匿名内部类对象】
         */
        AbstractTypeA a = new AbstractTypeA() {
            @Override
            public void testA() {
                System.out.println("抽象类的匿名内部类对象,地址保存在父类抽象类的引用变量中");
            }
        };

        a.testA();

        /*
        匿名内部类的匿名对象,直接调用方法
        Android开发中很常见
         */
        new AbstractTypeA() {
            @Override
            public void testA() {
                System.out.println("抽象类的匿名内部类的匿名对象,直接调用方法");
            }
        }.testA();


        test(wuYun);

        /*
        匿名内部类的匿名对象,直接作为方法的参数
        【常用】
            1. 快
            2. 节约资源
         */
        test(new AbstractTypeA() {
            @Override
            public void testA() {
                System.out.println("匿名内部类的匿名对象,直接作为方法的参数!!!");
            }
        });
    }

    public static void test(AbstractTypeA a) {
        a.testA();
    }
}

接口的匿名内部类

interface A {
    public void testB();
}

class TypeA implements A {

    @Override
    public void testB() {
        System.out.println("自定义类遵从接口,实现接口中缺省属性为abstract的方法");
    }
}

public class Demo2 {
    public static void main(String[] args) {
        TypeA typeA = new TypeA();
        typeA.testB();

        /*
        这里是把创建的接口匿名内部类的地址,赋值给了一个接口的引用
         */
        A a = new A() {
            @Override
            public void testB() {
                System.out.println("接口的匿名内部类对象");
            }
        };

        a.testB();

        /*
        匿名内部类的匿名对象
         */
        new A() {
            @Override
            public void testB() {
                System.out.println("匿名内部类的匿名对象,直接调用方法");
            }
        }.testB();

        /*
        匿名内部类的匿名对象,直接作为方法的参数
         */
        test(new A() {
            @Override
            public void testB() {
                System.out.println("接口A的匿名内部类的匿名对象,直接作为方法的参数");
            }
        });
    }

    public static void test(A a) {
        a.testB();
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值