Abstract Interface

Abstract Interface(骨架类),Interface是类名,如Collections的Abstract实现有AbstractCollections、AbstractSet、AbstractList、AbstractMap。当然,程序员也可以提供自己的接口实现,而不用依赖于这些骨架类,但是骨架类具有很大的优点:

举例:

下面的一个静态工厂包含了一个完整的功能全面的List实现:

static List<Integer> intArrayAsList(final int[] a){

    if(a == null)

          throw new NullPointerException();

    return new AbstractList<Integer>(){

         public Iteger get(int i){

               return a[i];

         }

        @override public Integer set(int i, Iteger val){

               int oldVal = a[i];

               a[i] = val;

               return oldVal;

         }

        public int size(){

              return a.length;

        }

    }

}

[AbstractList源码:http://www.docjar.com/html/api/java/util/AbstractList.java.html]

从这个类可以看出骨架类的强大优势,此外这个例子是个Adapter,它将int数组看作Integer列表,这个例子提供了一个静态工厂,返回的这个类还是一个不可访问的匿名类,它隐藏在静态工厂的内部。

骨架类的实现通过抽象类的方式提供了帮助,它使得接口的实现类可以扩展骨架类,或者将对于接口的调用转发到一个内部私有的骨架类的实现上,即“模拟多重继承”。在方法上与包装类十分类似。

骨架类将接口的基本方法保留下来将由子类实现,这些基本方法具有鲜明的接口特征,比如Map.Entry的getKey、getValue、setValue,而其他的支持方法则加以实现(override),比如equals、hashCode,此外骨架类还可以增加自己的其他具体支持方法、内部类等,参见AbstractList

骨架类的目的就是给程序员继承,它区别于简单实现,因为它至少是Abstract的,(可能)不可以子类化。

骨架类的好处在于它是Abstract类,可以增加具体的方法,避免破坏接口。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值