抽象类Root 

public abstract class Root {

    static init(){

        println("父类的静态构造函数")//优先执行

    }

    Root(value: String){

        println("这是一个父类对象"+value)//创建父类对象时执行

    }

    public open func exec1(): Unit{

        println("父类可重写成员函数")

    }

    public static func exec3(){

        println("父类静态函数")

    }

    protected func exec4(): Unit

    //抽象函数定义时没有实现,子类继承时必须实现这个抽象函数。

    //Unit为的exec4()函数类型,函数总要有个返回类型。

    //像exec1()的Unit就可有可无,println的返回类型就是Unit。

   

    public func exec5(){

        println("父类不可重写成员函数")

    }

}

继承Root的子类Base 

public class Base <:Root{

    Base(value: String){

        super("")

        println("这是一个子类对象"+value)//创建子类对象时执行

    }

    static init(){

        println("子类的静态构造函数")//优先执行

    }

    protected override func exec4(): Unit{

        println("实现抽象函数")

    }

    public override func exec1(): Unit{

        println("子类重写函数")

    }

}

public class Base2 <:Root{

    Base2(value: String){

        super("")

        println("这是一个子类对象"+value)//创建子类对象时执行

    }

    protected func exec4(): Unit{}

}

创建实例与调用 

    var base: Base = Base("base")

    var base2: Root = Base("base2")  //动态绑定(以Root为类型的对象=子类对象)

    var base3: Root = Base2("base3") //子类可以有多种

    // var base3: Base = Root("") 抽象类不可被实例化

    base.exec1()//子类重写

    base.exec4()//抽象重写

    base.exec5()//父类普通函数

    Root.exec3()//父类静态函数

base2、base3是Root的对象,怎么没有+value?

value是Base()的参数,Root当然没有,Root又不能实例化,他别想有value了。

这里base2、base3实际上就是Base对象。


3.28

上述论断有误

    Base(value: String){

        super(value)

        println("这是一个子类对象"+value)//创建子类对象时执行

    }

当主构造函数中super传递了value参数,那么Root()就能获取到value了

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐