首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扩展java.util.calendar类

扩展java.util.calendar类
EN

Stack Overflow用户
提问于 2013-05-21 16:43:49
回答 4查看 2.1K关注 0票数 0

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

代码语言:javascript
复制
import java.util.Calendar;
abstract class ExtendedCalendar extends Calendar {
    public static ExtendedCalendar getInstance()
    {
        Calendar c = Calendar.getInstance();
        return (ExtendedCalendar)c;
    }
}

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

代码语言:javascript
复制
java.lang.ClassCastException: java.util.GregorianCalendar cannot be cast to ExtendedCalendar

但是GregorianCalendar到日历的转换是如何工作的呢?

代码语言:javascript
复制
Calendar calendar = (Calendar)c;

我该如何解决这个问题呢?

EN

回答 4

Stack Overflow用户

发布于 2013-05-21 16:50:59

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

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

顺便说一句,我想你并不一定要扩展GregorianCalendar。扩展功能并不局限于扩展类。创建您自己的类,该类在计算中使用其他日历,而不是扩展它。

票数 4
EN

Stack Overflow用户

发布于 2013-05-21 16:48:59

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

如果可能,您可以尝试扩展GregorianCalendar。否则,不能从Calendar的子类转换为Calendar的另一个子类

票数 1
EN

Stack Overflow用户

发布于 2013-05-21 16:46:49

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

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

您可以使用普通类扩展Calendar并添加您的函数。然后你只需要定义你自己的属性和方法。你所做的是一个好的开始。您还可以扩展GregorianCalendar

您将可以访问实现的接口的方法和您自己的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16665653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档