Stack是个Vector,这从逻辑观点看是不正确的 在Java编程思想的7.8.4节中,对于final的忠告作者写到,Stack继承自Vector,就是说Stack是个Vector,这从逻辑的观点看是不正确的,请问大家这句话怎么理解呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 为啥从逻辑观点上看不正确?源码就是:public class Stack<E> extends Vector<E> {人类继承自灵长类,就是说:人类是灵长类。 哦,估计是说从实际上的语义上觉得很奇怪吧:“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的所有成员函数。因此从逻辑上看很奇怪。 这只不过是共享了Vector的一些属性和方法,但Stack不是Vector他是一个全新的类,他有他自己的特性。 Effective java上说继承有自己的一些原则,但是显然栈并不是向量,所以栈不应该扩展向量。同样的,Properties不应该继承HashTable.这样回导致子类拥有一些父类的方法,逻辑奇怪也可能出现歧义。 关于继承中遇到的一些问题,希望大家来帮帮我 jbpm4.1高手进下呗 PHPEclipse下如何安装JSEclipse? JAVA中==跟equals的问题 请问iframe如何得到父窗体里变量的值? 用awt做界面的问题。 如何在jbx中加入字体 Java 出现死循环,不知道哪里错了? 在TOMCAT4.1下如何使用连接池? 新手:用WEB页面修改数据库中的表? 求方法:在指定路径下按照坐标画出图片 Object中clone()的使用问题
public class Stack<E> extends Vector<E> {
人类继承自灵长类,就是说:人类是灵长类。
有种继承叫 类型继承比如在java.util.Date与java.sql.Timestamp之间,java.sql.Timestamp的JAVA API就明确说了:
鉴于 Timestamp 类和上述 java.util.Date 类之间的不同,建议代码一般不要将 Timestamp 值视为 java.util.Date 的实例。Timestamp 和 java.util.Date 之间的继承关系实际上指的是实现继承,而不是类型继承。