扩展java.util.calendar类

时间:2013-05-21 08:43:49

标签: java calendar

我想扩展java.util.Calendar类以添加一些额外的功能:

import java.util.Calendar;
abstract class ExtendedCalendar extends Calendar {
    public static ExtendedCalendar getInstance()
    {
        Calendar c = Calendar.getInstance();
        return (ExtendedCalendar)c;
    }
}

我总是得到这个异常,因为Calendar.getInstance返回一个GregorianCalendar:

java.lang.ClassCastException: java.util.GregorianCalendar cannot be cast to ExtendedCalendar

但是如何将GregorianCalendar转换成日历才有效?

Calendar calendar = (Calendar)c;

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:4)

Calendar.getInstance()是一种静态工厂方法,该事件不允许任何自定义或注入。它返回具体日历的实例。在大多数情况下,它是GregorianCalendar。它也可以是BuddhistCalendarJapaneseImperialCalendar,具体取决于您的区域设置。

如果您想创建日历实例,只需直接调用构造函数:new ExtendedCalendar()即可。

BTW恕我直言,你真的不需要扩展GregorianCalendar。扩展功能不仅限于扩展类。在计算中创建自己的使用其他日历的类,而不是扩展它。

答案 1 :(得分:1)

这就是多态性的工作原理。 GregorianCalendarExtendedCalendar都是Calendar的子类。这意味着它们都是Calendar类型。但是,GregorianCalendar不属于ExtendedCalendar

类型

如果可能,您可以尝试扩展GregorianCalendar。否则,您无法从Calendar的子类转换为Calendar

的另一个子类

答案 2 :(得分:0)

原因是Calendar是一个抽象类,GergorianCalendar是它的当前实现。

所以,我认为你的ExtendedCalendar课不应该是抽象的。

您可以使用普通类扩展Calendar并添加您的功能。您只需要定义自己的属性和方法即可。你所做的是一个良好的开端。 您还可以延长GregorianCalendar

您将可以访问已实现界面的方法和您自己的方法。

答案 3 :(得分:0)

这可以帮助你Extending Calendar in Java 延长日历类是一种犯罪行为,这已被许多专家忽视