从子类快速编程超类变量更新

时间:2014-08-13 03:26:08

标签: xcode macos swift superclass

我刚开始接受编程,并试图理解子类可以更新超类中的变量的方式。我有一个家庭超类跟踪家庭成员,每次创建一个家庭成员时,家庭成员变量加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

1 个答案:

答案 0 :(得分:4)

这是因为每次创建Family对象或子类(以及SonMother)时,您都引用了不同的Family:{{调用1}},但它是每个特定系列成员的变量,而不是每个对象访问的共享变量。

看起来你对子类(以及扩展,继承)的符号化有点困惑:而不是认为子类属于到它的父类,假装一个子类< em>是其父类的更具体的版本。例如,familyMembers++将是Jaguar的子类; Animal将是Sedan的子类;要使用您的示例,Car不是Son的子类,而是Family的子类。

考虑以下示例,其中我们将一个公共FamilyMember对象传递给Family构造函数以跟踪成员数量:

FamilyMember