【发布时间】:2017-01-18 20:56:33
【问题描述】:
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()
【问题讨论】:
-
一些旁注:类名应该是单数的,并且你应该避免在不是绝对必要的地方添加显式类型注释,并且变量名(例如
MyAnimal)应该BeLowerCamelCase。 -
对于语义,您可能还想将属性
name重命名为例如species,并且可以选择保留前者,以防你真的想存储你邻居狗的 name(希望是Fred而不是dog)。此外,由于species将是(子)类型唯一的常量,您可以让它成为(不可变)类属性而不是实例属性。 -
真的
Animals(应该命名为Animal)在我看来很抽象(创建Animal的实例真的有意义吗?)。您可能需要考虑将Animal改为协议,并让符合标准的类型使用您想要的任何默认值定义自己的name和age属性。
标签: swift inheritance overriding overloading