/* Inheritance
1.swift中没有给类定义一个超类(像python的Object一样),这就意味着作为superclass的空类什么都不能做。
2.override一个函数时,需要在前面添加override关键字,指定构造器init,如果不是required的需要写,便利构造不需要写override。
3.注意overload是函数名相同,参数不同。override实说函数名何参数返回值跟父类的相同。
4.不能在非override函数前面加这个关键字。
5.可以override父类的属性,为这个属性添加getter/setter或者添加Observer(willset/didset)
注意:可以将父类的const属性修改为读写的,但是不可以将父类的读写属性修改为const的。
反过来说,如果将父类的读写属性改为const,那么继承父类的函数写这个变量的函数就会出错,我猜为了防止这样swift干脆全部禁止。
6.给不想被override的函数,属性,甚至整个类前面添加@final,就可以避免被override啦。
7.如果override一个属性,则override的是getter和setter,不能直接写属性本身。
即不能这样写。overide var superproperty = 0,重写了setter后,就必须重写getter,如果没啥特殊的直接写super.property即可。
可以将只读属性,在子类中改为读写的。但是不能将父类的读写属性,修改为只读的。
*/
class SuperClass
{
var memInt:Int
var willsetOverride:Int = 0
init(myInt:Int)
{
memInt = myInt
}
func test()
{
println("SuperClass test")
}
}
class SubClass:SuperClass
{
overridevar memInt:Int
{
get
{
return super.memInt
}
set
{
println("Setter\(newValue)")
super.memInt =min(newValue, 10)//处理完特殊的处理后,将值赋给父类的super属性
}
//willset✨✨不能给函数即添加set又添加willset,另一方面讲这样没有意义,直接在set中做既可以了。
}
override var willsetOverride:Int
{
willSet
{
println("willsetOverride newvalue:\(willsetOverride)")
}
}
init()
{
super.init(myInt: 3)
}
override func test() //override
{
//super.test() 如果需要可以调用父类的被override的方法。
println("SubClass test")
}
func test(name:String)//注意与override区别 , overload
{
println("SubClass\(name)")
}
func testModifyMem()
{
self.memInt = 3
}
}
var s = SubClass()
s.test()
s.test("Sub")
s.testModifyMem() //setter 3
//final的各种东西都不可以被继承。
//《完》