我想扩展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;
我该如何解决这个问题?
答案 0 :(得分:4)
Calendar.getInstance()
是一种静态工厂方法,该事件不允许任何自定义或注入。它返回具体日历的实例。在大多数情况下,它是GregorianCalendar
。它也可以是BuddhistCalendar
或JapaneseImperialCalendar
,具体取决于您的区域设置。
如果您想创建日历实例,只需直接调用构造函数:new ExtendedCalendar()
即可。
BTW恕我直言,你真的不需要扩展GregorianCalendar
。扩展功能不仅限于扩展类。在计算中创建自己的使用其他日历的类,而不是扩展它。
答案 1 :(得分:1)
这就是多态性的工作原理。
GregorianCalendar
和ExtendedCalendar
都是Calendar
的子类。这意味着它们都是Calendar
类型。但是,GregorianCalendar
不属于ExtendedCalendar
如果可能,您可以尝试扩展GregorianCalendar
。否则,您无法从Calendar
的子类转换为Calendar
答案 2 :(得分:0)
原因是Calendar
是一个抽象类,GergorianCalendar
是它的当前实现。
所以,我认为你的ExtendedCalendar
课不应该是抽象的。
您可以使用普通类扩展Calendar
并添加您的功能。您只需要定义自己的属性和方法即可。你所做的是一个良好的开端。
您还可以延长GregorianCalendar
。
您将可以访问已实现界面的方法和您自己的方法。
答案 3 :(得分:0)
这可以帮助你Extending Calendar in Java 延长日历类是一种犯罪行为,这已被许多专家忽视