日期:2014-05-20  浏览次数:20586 次

Stack是个Vector,这从逻辑观点看是不正确的
在Java编程思想的7.8.4节中,对于final的忠告作者写到,Stack继承自Vector,就是说Stack是个Vector,这从逻辑的观点看是不正确的,请问大家这句话怎么理解呢?

------解决方案--------------------
哦,估计是说从实际上的语义上觉得很奇怪吧:

“Stack extends Vector”从语义上意味着:堆栈是个向量 或者 堆栈属于向量。

其实从现实生活中,并不会认为堆栈是从向量衍伸而来的,所以这种继承关系会让人从语义上觉得奇怪。

有点像是:某人为了贪图方便,定义猴子的时候,直接从人类继承过来了;结果语义变成了 猴子属于人类。
------解决方案--------------------
有种继承叫 实现上的继承
有种继承叫 类型继承

比如在java.util.Date与java.sql.Timestamp之间,java.sql.Timestamp的JAVA API就明确说了:
鉴于 Timestamp 类和上述 java.util.Date 类之间的不同,建议代码一般不要将 Timestamp 值视为 java.util.Date 的实例。Timestamp 和 java.util.Date 之间的继承关系实际上指的是实现继承,而不是类型继承。
------解决方案--------------------
从逻辑观点上看不正确就是说,Stack本来可用成员函数就是很少的像push,pop等。而直接继承Vector后,该Stack拥有了Vector的所有成员函数。因此从逻辑上看很奇怪。