Java学习4

不可变类

遵循原则:

1、不提供任何改变对象状态的方法
2、保证类不会被扩展,即final修饰
3、所有的域都是final
4、所有的域都是private
5、确保对于任何可变组件的互斥访问

复合优于继承

举个例子:
如果对于HashSet,我们想要知道它被创建以来曾经添加了多少元素。
因此,我们继承hashset类,并重写了add()和addAll()两个方法,试图记录插入元素的数量。

private int countNum = 0;
public boolean add(E e){
    countNum++;
    return super.add(e);
}
public boolean addAll(Collection<? extends E> c){
    countNum+=c.size();
    return super.addAll(c);
}
看似完成,但是如果我们创建一个实例,添加了三个元素,我们期望的countNum返回值是3,结果却是6,错误在哪? 因为addAll需要基于add方法实现的,相当于每个元素都被计算了两次值。
那么复合是什么
在新的类中增加一个私有域,它引用现有类的一个实例。现有的类变成新类的一个组件。
新类中的每一个实例都可以调用被包含的现有类实例中对应的方法,并返回它的结果。这就是转发。
复合的实现方法
它包含两个部分
①可重用的转发类
②类本身
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值