我有这种困境,我需要在Gregorian和Julian calanders中选择不同类型的继承。我希望有一个名为Date的类作为基类。 我的问题如下:我是否应该有一个继承自日期类的Gregorian类和Julian那样的类?或者只有Gregorian类继承自Date和Julian继承自Gregorian,反之亦然?或者我应该在Date之下有一个继承自Date的类,并且从该类继承Gregorian和Julian?
Date Date Date Date
Gregorian Julian Gregorian Julian New class
Julian Gregorian Gregorian Julian
我个人会选择继承Date的第一个选择,这是一个不错的选择。我可以得到关于这个的som意见吗?
答案 0 :(得分:3)
我不知道日历系统的内部细节,但我确信很难不低估它们的微妙复杂性。仅这一点就会让我绝对不想要在类层次结构中混合实现。
我会去
PS。在经典的“Liskov”意义上,你可以有一个抽象基类Date,它只是“命名”所有(大多数?)日历系统共有的概念。但是,我真的怀疑增值是多少。我可以看到它导致了很多混乱(它邀请代码在任何或所有代码中混合使用Date的子类型,并且所有使用日期时间类的代码必须准备好始终处理整个色域。)
答案 1 :(得分:2)
Gregorian和Julian日历是两种类型的日历。对于他们来说,从公共基类继承而不是从彼此继承是更好的。
可以在Joda时间找到一个例子,它将格里高利和朱利安年表作为共同基础年表的不同子句。
可以在标准Java库中找到一个反例,其中Gregorian和Julian日历由同一个类支持。
答案 2 :(得分:1)
Calendar
不是Date
,因此无需继承Date
。
最多Calendar
应在Dates
上运行。或许Date
可以将自己从一种转换为另一种。
您到底想要做什么,为什么它已经在第三方库中完成?