swift - 如何在其子类中修改类的属性?

标签 swift inheritance overriding overloading

class Animals{
    var name : String = "default"
    var age : Int = 0
    func Details()-> String{
        return "This animal is a \(name) and has \(age) years old."
    }
}


class Dogs : Animals{
    name = "dog"
}

class Cats : Animals{
    name = "cat"
}

var MyAnimal = Dogs()

我想看到这条消息:“这只动物是一只狗,已经 0 岁了。” 但是每次我收到这个:“这只动物是默认的并且有 0 岁。”

var HisAnimal = Cats()

最佳答案

如果您想要存储属性而不是计算属性,您可以在初始化程序 中设置name,如下所示:

class Animal {
    let name: String
    var age: Int = 0
    /* designated initializer: fully initializes all instance properties */
    init(name: String) {
        self.name = name
    }
    func details() -> String {
        return "This animal is a \(name) and has \(age) years old."
    }
}


class Dog : Animal {
    /* designated initializer of subclass: must call a designated
       initializer from its immediate superclass                   */
    init() {
        super.init(name: "dog")
    }
}

class Cat : Animal {
    /* ... */
    init() {
        super.init(name: "cat")
    }
}

let myAnimal = Dog()

这种机制确保 name 仅从一个地方设置,并显式传递给初始化程序。

关于swift - 如何在其子类中修改类的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41729282/

相关文章:

python - 谷歌应用程序引擎polymodel - 重写实例方法 - 失败 - python

json - Swift:如何将接收到的字符串转换为 json

swift - 不支持的架构 - Metal 和 Swift 之间的共享枚举

swift - 观察 NSTextView 中的文本变化

inheritance - Haxe 反射 - 子类和接口(interface)

java - 在运行时使用反射覆盖方法级别@annotation,适用于类级别

ios - 如何使用图像选择器将 URL 作为图像的字符串 POST 到 API 进行处理?

python - 如何在 Django Python 中从子类访问父类字段

java - 我不明白Java继承的一些内容

python - 创建具有额外功能的自定义 namedtuple 类型