我有一个子类,我希望能够返回其超类的实例。这不起作用:
func baseTransaction()->Transaction {
return super
}
我可以用这样的简单方式返回基类,还是需要创建实例并复制所有适当的属性?在过去,我已经做到了这一点,但我想我会看到是否有办法更简单地做到这一点。
答案 0 :(得分:0)
当你说“返回它的超类的一个实例”时,我认为你的意思是“将这个类实例作为它的超类返回” - 在这种情况下你必须返回实例本身:
func baseTransaction() -> Transaction {
return self
}
如果你有一个Transaction
类,并创建一个SubTransaction
子类:
class SubTransaction : Transaction { ... }
然后SubTransaction
的任何实例也是Transaction
的实例,因此可以赋予类型Transaction
的任何变量(或者可以作为参数传递)。
请注意,子类可以覆盖基类的实现,同时保持相同的接口(或扩展它)。如果这是您想要避免的,并且您需要基类的真实实例,那么唯一的方法是创建一个新实例。大概你必须在基类中创建一个复制构造函数,然后获得一个带有如下函数的超类副本:
func baseTransaction() -> Transaction {
return Transaction(self)
}