如果我上课:
class Spaceship<FuelType> { function prepareForLiftoff() throws { //Start the countdown! } }
我最初以为我可以prepareForLiftoff通过添加扩展名来覆盖子类而无需子类化:
prepareForLiftoff
extension Spaceship where FuelType: CollectionType { func prepareForLiftoff() throws {} }
该代码不会编译,但错误说明invalid redeclaration了该函数,这很有意义。
invalid redeclaration
我的问题是: 是否仍要重写特定类的功能?换句话说,在某些情况下,例如上面的示例中,我可以替换功能吗FuelType: CollectionType?如果没有,是否有其他解决方法或方法来实现该行为(可能声明了另一个协议,idk)
FuelType: CollectionType
现在,我考虑得更多了,我不得不说这是不可能的,因为是什么阻止某人重写任何标准库函数?
从文档中:
扩展可以为类型添加新功能,但不能覆盖现有功能。
该文档仔细,准确地列出了允许扩展的功能。
关于你的问题:
无论如何有重写特定类的功能
是的,这称为子类化。