众所周知,调用preparedStatement.setDate(date)方法时,其中的参数date如果是util包中的,则必须显式转换成sql包中的才可以作为参数传入setDate()方法可是怪异的现象发生了:
某个实体类中定义了一个方法:public class Leave
{
    public void setProcessedDate(java.util.Date processedDate) {
    this.processedDate = processedDate;
    }
    ...
    ...
    ...
}
当调用这个方法时,居然可以直接往里面传sql包里的Date参数,也就是说:
Leave leave = new Leave();
leave.setProcessedDate(rs.getDate());
以上两行代码居然没有报错!
resultSet.getDate()返回的是一个sql包里的Date对象,居然直接作为实参传到只接受util包Date形参的方法里去了
这个现象实在是太怪异了,敢问各位前辈,这到底是怎么回事呢?

解决方案 »

  1.   

    自己刚刚弄明白了,原来util.Date是sql.Date的父类,子类对象作为实参传入到只接受父类形参的方法里,是多态的一种表现。大家随便发表一点意见吧,俺也好散分
      

  2.   

    不知道该说啥,你已经知道结论了。util.Date 是绝大多数日期、时间类的父类。
      

  3.   

    确实java.util.Date是sql.Date、sql.Time、sql.Timestamp的父类。。