我刚开始接受编程,并试图理解子类可以更新超类中的变量的方式。我有一个家庭超类跟踪家庭成员,每次创建一个家庭成员时,家庭成员变量加1。这就是我所拥有的。
我尝试了几种方法,包括在超类中创建更新系列成员方法,并在其init语句中从子类调用它,但它仍然无法正常工作。如果有人可以帮助我或至少解释为什么它不更新我会很感激。感谢。
哦,游乐场说它运行家庭成员++ 4次,但变量没有保留更新。我也试过创建两个变量,一个更新另一个但仍然没有。
编辑:
谢谢。我会尝试更好地理解这个概念。我感谢您的帮助。谢谢:D
class Family {
var familyMembers = 0
init() {
familyMembers++
}
func talk() {
println("The family is talking")
}
func argue() {
println("The family is arguing")
}
}
class Son : Family {
var hisName = ""
init(name: String) {
super.init()
self.hisName = name
}
override func argue() {
println("\(hisName) is arguing")
}
}
class Mother : Family {
var herName = ""
init(name: String) {
super.init()
self.herName = name
}
}
let barthelemy = Family()
let ayden = Son(name: "ayden")
let tasha = Mother(name: "tasha")
let jim = Son(name: "jim")
barthelemy.familyMembers
答案 0 :(得分:4)
这是因为每次创建Family
对象或子类(以及Son
或Mother
)时,您都引用了不同的Family
:{{调用1}},但它是每个特定系列成员的变量,而不是每个对象访问的共享变量。
看起来你对子类(以及扩展,继承)的符号化有点困惑:而不是认为子类属于到它的父类,假装一个子类< em>是其父类的更具体的版本。例如,familyMembers++
将是Jaguar
的子类; Animal
将是Sedan
的子类;要使用您的示例,Car
不是Son
的子类,而是Family
的子类。
考虑以下示例,其中我们将一个公共FamilyMember
对象传递给Family
构造函数以跟踪成员数量:
FamilyMember