自定义类扩展日期的Java向下转发 - 运行时错误

时间:2016-09-19 21:16:54

标签: java android casting

我有一个这样的课程:

public class DateS extends Date {
    public DateS yesterday(){
        Calendar cal = Calendar.getInstance();
        cal.setTime(this);
        cal.add(Calendar.DAY_OF_YEAR, -1);
        return (DateS) cal.getTime();
    }
}

它可以成功构建。在运行时,当我致电date.yesterday()时,会抛出Cannot cast 'java.util.Date' to 'myproject.package.DateS'

我需要知道为什么以及如何解决这个问题。

1 个答案:

答案 0 :(得分:3)

由于Calendar未生成DateS,因此它使用Date的不同实现。

为了转换为DateS,对象必须是DateS的实例或该类的子级。由于Calendar未返回DateS的实例,因此无法将其转换为i。它编译得很好,因为理论上它可以工作,如果返回的日期是正确的类型,编译器无法分辨。