2013-05-21 26 views
0

我想要擴展,以添加一些額外的功能java.util.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的Cast是如何工作的?

Calendar calendar = (Calendar)c; 

我該如何解決這個問題?

+0

你可以擴展GregorianCalendar的,而不是忽略日曆類。或者提供一個靜態實用程序類c,其中包含額外的方法。 – assylias

回答

0

原因是Calendar是一個抽象類,GergorianCalendar是它的當前實現。

所以,我認爲你的ExtendedCalendar類不應該是抽象的。

您可以使用普通類擴展Calendar並添加您的功能。您將只需要定義自己的屬性和方法。你做的是一個好的開始。 您還可以擴展GregorianCalendar

而且您將可以訪問已實現的接口的方法和您自己的方法。

+0

啊好的,那麼用一些額外的功能擴展日曆的最佳方法是什麼? – freakout

+0

嗯,我想是的。 – Xaltar

1

這就是多態性是如何工作的。 GregorianCalendarExtendedCalendar都是Calendar的子類。這意味着它們都是Calendar。但是,GregorianCalendar不是ExtendedCalendar

如果可能,您可以嘗試擴展GregorianCalendar。否則,你無法從Calendar子類鑄造爲Calendar

4

Calendar.getInstance()另一子類是靜態工廠方法事件不允許任何自定義或注射。它返回具體日曆的實例。在大多數情況下,它是GregorianCalendar。根據您的區域設置,它也可以是BuddhistCalendarJapaneseImperialCalendar

如果您想創建日曆的實例,只需直接調用您的構造函數即可:new ExtendedCalendar()

順便說一句恕我直言,你並不需要延長GregorianCalendar。擴展功能不限於擴展類。創建自己的類在其計算中使用其他日曆而不是擴展它。