陕西恒发建设网站,做包装盒效果图的网站,网站换域名 百度收录,国外ip地址怎么弄这个#xff0c;不管是什么书都会这样说#xff0c;因为常常我们并不需要继承#xff0c;而只是想把类进行一定的扩展#xff0c;而我们想扩展的属性或方法对应的类都有#xff0c;这个时候如果两者是is a的关系#xff0c;这种关系是确实存在的#xff0c;那么就可以使…这个不管是什么书都会这样说因为常常我们并不需要继承而只是想把类进行一定的扩展而我们想扩展的属性或方法对应的类都有这个时候如果两者是is a的关系这种关系是确实存在的那么就可以使用继承不然一般都是建议使用复合。 如果我们队一个类进行继承的时候我们如果对其内部的逻辑并不十分了解的时候直接继承的结果就是可能有些方法是类自己内部调用的而我们在继承这个方法的时候可能会覆盖某些方法或者重载某些方法或者加上了一些自己的逻辑这样就会吧原来的逻辑和我们自己的逻辑混杂起来并且如果继承的类内部有使用这个类的话那么就会调用我们自己写的部分逻辑那么结果就变得不可预料了 这里的建议是使用包装类模式 package cn.xf.cp.ch02.item16;import java.util.Collection;
import java.util.Iterator;
import java.util.Set;public class ForwardingSetE implements SetE
{/*** 这个类作为转发类内部通过复合的方式把set作为一个组件*/private final SetE s;public ForwardingSet(SetE s){this.s s;}Overridepublic int size(){return s.size();}Overridepublic boolean isEmpty(){return s.isEmpty();}Overridepublic boolean contains(Object o){return s.contains(o);}Overridepublic IteratorE iterator(){return s.iterator();}Overridepublic Object[] toArray(){return s.toArray();}Overridepublic T T[] toArray(T[] a){return s.toArray(a);}Overridepublic boolean add(E e){return s.add(e);}Overridepublic boolean remove(Object o){return s.remove(o);}Overridepublic boolean containsAll(Collection? c){return s.containsAll(c);}Overridepublic boolean addAll(Collection? extends E c){return s.addAll(c);}Overridepublic boolean retainAll(Collection? c){return s.retainAll(c);}Overridepublic boolean removeAll(Collection? c){return s.removeAll(c);}Overridepublic void clear(){s.clear();}} 这样我们在每个方法中调用了私有成员的方法那么私有成员对外部就是不可见的它里面的方法就不会和外面的方法混杂起来 package cn.xf.cp.ch02.item16;import java.util.Collection;
import java.util.Set;/*** *功能包装类*时间下午9:58:36*文件InstrumentedSet.java *author xiaof ** param E*/
public class InstrumentedSetE extends ForwardingSetE
{private int addCount 0; //用来统计set添加了多少元素public InstrumentedSet(SetE s){super(s);}Overridepublic boolean add(E e){addCount;return super.add(e);}Overridepublic boolean addAll(Collection? extends E c){addCount c.size();return super.addAll(c);}public int getAddCount(){return addCount;}} 转载于:https://www.cnblogs.com/cutter-point/p/5866587.html