java, 继承与倚赖ReentrantLock, 在使用方法上的区别

   阅读
java, 继承与依赖ReentrantLock, 在使用方法上的区别?
本帖最后由 fly0wings 于 2014-07-02 14:02:17 编辑
最近在看guava的cache源码, 发现LocalCache.Segment类是继承ReentrantLock.

但是我看Segment只用到了lock,unlock,isHeldByCurrentThread 三个方法,

这三个方法都是public的,就是说如果用依赖的方式,这几个方法都可以调用到的.

 

又查了一下ReentrantLock 的子类, 发现子类包括有: java.util.concurrent.ConcurrentHashMap.Segment

 

那么为什么不使用依赖(ReentrantLock lock= new ReentrantLock()), 而是用继承呢??

或者说在什么情况下能体现出继承的好处?
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

继承目的就 是不忘本,再创新的意思!

将可用的拿来,还可以在其拿来的基础上进行修改创新。

还有就是直接拿来使用势必导致多个地方调用,还不如我自己使用我的东西,然后内部的所有类都使用它。
这样也清晰明了些。不用多次调用别人的东西。


同意  不是说组合一定优于继承  继承的本来目的是为了复用  不需要加入任何东西就能复用


这个我能理解, 问题在于, 继承之后,并没有使用protected方法, 也没有方法覆盖, 只调用了几个public方法. 所以不认为复用是这么用的根本原因.


This subclass inherits from ReentrantLock
   opportunistically, just to simplify some locking and avoid separate construction.

java doc 已经说的蛮明白的
这里投机的继承了ReentrantLock,仅仅想简单化一些锁的操作和 避免单独再去构建锁的逻辑了。

因为subclass  segment需要用到重入所的一些功能,又不想自己再去实现。所以投机了使用了ReentrantLock原有的功能。
阅读