我刚刚在swift中进行了一些继承实验,这是我的代码:
class parent {
var value: Int?
}
class child1: parent {
func setParent() {
value? = 213
}
}
class child2: parent {
func setParent(){
value? = 234
}
}
let a = child1()
let b = child2()
a.setParent()
print(b.value) //nil
print(a.value) //nil
我设置了一个parent
类,该类只有一个value属性,我有一个child1
和child2
,它继承自parent
。
在引用语义下,如果我将value
属性设置为值(213),如果我去检查child2
下的值,我会看到相同的值,因为{{1} }和child1
都从child2
继承,指向parent
类。但事实证明,如果我打印这些值,两者都是零......有人可以解释一下吗?
谢谢!
答案 0 :(得分:2)
你有
value? = 213
和
value? = 234
那些说“如果它不是nil
,则将值设置为213(或分别为234)”。那显然不是你的意思。
分配这些值时,应删除?
个{}。即,那些应该分别是:
value = 213
和
value = 234
一旦我们解决了这个问题,你就会跟进:
我们不应期望
b.value
也会产生值213
吗?
没有。 a
是child1
的一个实例,其实例属性为value
,它继承自超类parent
。 b
是一个完全独立的实例,child2
从超类value
继承自己的实例变量parent
。仅仅因为child1
和child2
继承自parent
并不会改变value
是实例属性的事实,因此单独的实例a
和{{1将获得b
的唯一实例。