Inheritance

来源:互联网 发布:天天向上的网络作家 编辑:程序博客网 时间:2024/05/16 10:47

/* Inheritance

1.swift中没有给类定义一个超类(像pythonObject一样),这就意味着作为superclass的空类什么都不能做。

2.override一个函数时,需要在前面添加override关键字,指定构造器init,如果不是required的需要写,便利构造不需要写override

3.注意overload是函数名相同,参数不同。override实说函数名何参数返回值跟父类的相同。

4.不能在非override函数前面加这个关键字。


5.可以override父类的属性,为这个属性添加gettersetter或者添加Observerwillsetdidset

注意:可以将父类的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的各种东西都不可以被继承。

//《完》

0 0
原创粉丝点击