(18):接口优先于抽象类

因为java只允许单继承,所以抽象类受到了极大的限制。但是接口一点定义,被其他类广泛应用时,其扩张就变得很困难。而抽象类的演变比接口的演变容易得多。

骨架通过对导出的每个重要接口都提供一个抽象的骨架实现类,把接口和抽象类的优点结合起来 。接口的作用仍然是定义类型,但是骨架实现类接管了所有域接口实现相关的工作 。

static List<Integer> intArrayAsList(final int[] a){
        if(a == null)
            throw new NullPointerException();
        return new AbstractList<Integer>() {
            public Integer get(int i){
                //自动装箱
                return a[i];
            }
            public Integer set(int i,int val){
                int oldval = a[i];
                //自动拆箱
                a[i] = val;
                自动装箱
                return oldval;
            }
            public int size(){
                return a.length;
            }
        };
    }
通过对Java源码的学习我们会发现,AbstractCollection实现了Collection接口,List接口继承自Collection接口,AbstractList又继承了AbstractCollection类,并且实现了List接口。
诸如此种的还有AbstarctSet,AbstarctList,AbstarctMap,都是继承了一个抽象类,又实现了一个上层接口。这样做的好处:通过对你导出的每个重要接口都提供一个抽象的骨架实现类(skeletal implementation)类,把接口和抽象类的优点结合起来。接口的作用仍然是定义类型,但是骨架实现类接管了所有与接口实现相关的工作。

骨架实现方法:

首先是,接口定义了功能性的方法; 
然后,一个抽象类实现了这个接口,作为骨架实现类,它完成了接口的一部分实现(默认实现) 
最后是一个普通类,继承自这个抽象的骨架实现类,并完成了抽象类中未实现的方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值