我有一堂课。它的子类B.我需要覆盖其属性的类型。也可以改变协议。我怎么能这样做?
class A {
var property: String (or SomeProtocolA)
}
class B: A {
var property: Int (or SomeProtocolB)
}
也许可以为子类中的属性添加支持第二协议?
答案 0 :(得分:0)
你不能,这表明设计很差。
假设A类有一个功能:
class A {
var property: String (or SomeProtocolA)
func getMyString() -> String {
return property
}
}
现在B级继承它,而“覆盖”property
:
class B : A {
var property: Int(or SomeProtocolB)
// func getMyString() -> String { //inherited from superclass
// return property //type error, expected String, returning Int
//}
}
答案 1 :(得分:0)
你可以这样做,但是在非常有限的情况下。允许这样做的唯一方法是在以下情况下:
get
。struct
,protocol
或enum
)。以下是覆盖字符串的示例:
class A {
var property: NSString {
return ""
}
}
class B: A {
override var property: NSMutableString {
return NSMutableString(string: "")
}
}