如果我有一個子類,怎麼可能拒絕一個func與其他參數的訪問?在Swift中,用參數覆蓋func。添加目標到項目
更容易與代碼解釋:
class A {
func printSometing() {
print("Class A printing")
}
}
class B: A {
override func printSometing() {
print("Class B printing")
}
}
class C: A {
func printSometing(withPar:String) {
print("Class C printing" + withPar)
}
}
let prA = A()
prA.printSometing()
let prB = B()
prB.printSometing()
let prC = C()
prC.printSometing() //I don't won't that C can print this
prC.printSometing(withPar: " my free par")
的印痕:
prA prints: Class A printing
prB prints: Class B printing
prC prints: Class A printing
prC prints: Class C printing my free par
好,是正常的,但我怎麼能避免中國可打印 「A級打印」?
周圍的工作就是寫:
class C: A {
func printSometing(withPar:String) {
print("Class C printing" + withPar)
}
override func printSometing() {}
}
但我不會說誰在使用與C類FUNC printSometing,被迫只能使用樂趣printSometing(withPar:字符串),而不是printSometing ()
我相信有一個解決方案。
UPDATE:
如果沒有解決方案,我認爲唯一的解決辦法,迫使它是:
class C: A {
var myPar:String
init (withPar:String) {
self.myPar = withPar
}
func printSometing(withPar:String) {
print("Class C printing" + withPar)
}
override func printSometing() {
printSometing(withPar: myPar)
}
}
讓我知道感謝
UPDATE:我的理由
好的我會解釋。我正在進行一場比賽,在我重複目標的項目中。所以一些文件在兩個目標中是共同的,其他一些沒有。例子GameScene.swift是不同的。在新的目標中,我想製作相同的遊戲,但差異很小。 示例我在播放器中添加了一些功能,但我不會保留原始文件。如果我更改了目標1中的Player.swift,則目標2中的更改也相同。這是因爲Player2類與Player的90%相同。如果我在播放器中改變一些func,Player2也會改變。
目標1:GameScene.swift
目標1和目標2:Player.swift
目標2:Player2.swift
class Player: SKNode {
//All my stuff
func shot() {
//bla bla bla
}
}
class Player2: Player {
override init() {
//Different physics etc
}
func shot(withColor: SKColor) {
//bla bla bla
}
//All other func of Player.swift are available, ok I whant this.
}
現在是什麼問題? 在可能GameScene.swift的目標2中,我可以調用shot()。但對於新遊戲來說,只需要調用func shot(withColor:SKColor)。 好吧,我知道這一點,並足夠不要叫shot()。但我在想,明天我會忘記這一點。
另一個解決方法是複製target2中的所有Player.swift。但是,如果我將在target1的Player.swift中添加一個func,則func不會出現在target2中。
是我第一次在項目中使用2個目標,我一定會正確地做到這一點。 由於
沒有辦法做到這一點,它會破壞里氏替換原則 – dan
謝謝@丹,請檢查我的更新來了解,如果是繼續的唯一途徑。 –
你的問題不是這*不能做*,而是它*不應該*。這只是沒有意義。你究竟想達到什麼目的? – Alexander