重载是在编译时考虑的;覆盖在执行时考虑。
时间戳 重载 after
,它不会 覆盖 现有方法- 因此您oneDate.after(twoDate)
只考虑了中的方法java.util.Date
; 而且即使你使用one.after(twoDate)
它会 仍然 只使用after(Date)
因为编译时类型twoDate
是Date
不是Timestamp
。
如果你打电话one.after(two)
,然后 说 会用Timestamp.after(Timestamp)
。
Date.after(Date)
仅考虑毫秒-但Timestamp
仅将整数秒传递给的构造函数Date
,因此即使您将不同的值传递给构造函数oneDate
,twoDate
也具有相等的毫秒值Date
。
值得在文档中Timestamp
注意这一点:
由于上述Timestamp类和java.util.Date类之间的差异,建议代码不要以java.util.Date的实例的形式一般性地查看Timestamp值。Timestamp和java.util.Date之间的继承关系实际上表示实现继承,而不是类型继承。
老实说,听起来我对继承的使用非常差-但是Java有很多这样的:(