gpt4 book ai didi

swift - 如何覆盖父类(super class)中的私有(private)变量

转载 作者:搜寻专家 更新时间:2023-11-01 05:47:07 32 4
gpt4 key购买 nike

所以我有以下父类(super class):

class Vehicle {

private var _maxSpeed: Int = 100

var maxSpeed: Int {
get {
return _maxSpeed
}

var tooFast: Bool {
get {
if maxSpeed >= 140 {
return false
} else {
return true
}
}
}
}

另外,我有一些子类,我想在其中覆盖 maxSpeed... 每个示例:

class SuperCar: Vehicle {
//override the maxspeed...

}

但是我应该如何处理呢?或者这是否只有在我们不将其设为私有(private)的情况下才有可能?我试着把隐私部分扔出窗外,但那也行不通......

class Vehicle {

var maxSpeed: Int = 100

var tooFast: Bool {
get {
if maxSpeed >= 140 {
return false
} else {
return true
}
}
}
}

class SuperCar: Vehicle {
// override the maxSpeed...
override var maxSpeed: Int = 200
// Will not work...
}

最佳答案

只需将类和子类放在同一个文件中即可。 private 与继承无关。它与文件范围有关。同一文件中的任何内容都可以访问 private 成员。

也就是说,您几乎可以肯定不应该在这里使用继承。 Vehicle 几乎肯定是一个协议(protocol)。这样您就不会再为继承或 private 而头疼了。

protocol Vehicle {
var maxSpeed: Int {get}
}

extension Vehicle {
// Default implementation if none is given
var maxSpeed: Int { return 100 }

// Another method that applies to all Vehicles
var tooFast: Bool {
return maxSpeed < 140 // (feels like this should be >= 140, but matching your code)
}
}

struct SuperCar: Vehicle {
// override the default implementation for the protcocol
var maxSpeed = 200
}

关于swift - 如何覆盖父类(super class)中的私有(private)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33921460/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com