【发布时间】:2013-02-07 04:48:50
【问题描述】:
我想创建一个Time 的子类,比如说MyTime,这样我就可以定义(尤其是与格式相关的)方法而不会污染Time 类。
class MyTime < Time; end
对于Time上定义的一些构造方法,我可以像这样在MyTime中使用它们:
MyTime.now
但有时我需要基于Time 的实例创建MyTime 的实例。例如,我想有一个 MyTime 的实例,基于:
File.mtime(path_to_some_file)
这是一个Time 实例。构造函数Time#new 不接受Time 实例,所以我不能使用它。我该怎么做?
【问题讨论】:
-
你能用组合代替继承吗?
MyTime可以简单地持有Time类的一个实例并将所有调用委托给它,这可能是一个更冗长的实现;但它会给你File.mtime(...)所需的灵活性 -
@HunterMcMillen 如果这是唯一的方法,那将是最后的手段,但如果可能的话,我想避免这种情况。