一、继承的作用

        减少子类中共同的属性和函数,减少代码的重复和冗余。

二、继承的代码实现

//在类前加open关键字,表示此为需要被继承的父类
public open class father {

}
//用<:关键字表示继承关系,在仓颉中一个子类只能继承自一个父类,减少代码复杂度
class son <: father{

}

三、继承中的构造函数

//在类前加open关键字,表示此为需要被继承的父类
public open class Father {
    static init() {
        println("1.父类的静态构造函数")
    }
    Father(value: Int64) {
        println("2.父类Father的主构造函数")
    }
}
//用<:关键字表示继承关系,在仓颉中一个子类只能继承自一个父类,减少代码复杂度
class Son <: Father {
    //子类的构造依赖于父类的构造函数
    static init() {
        println("3.子类的静态构造函数")
    }
    Son() {
        //分两种情况,当父类有默认的参数的时候,需要显式的写出super(具体参数)反之则可省略super()
        super(1) //访问父类的主构造函数
        println("4.子类的主构造函数")
    }
}
public func exc1(){

    var son : Son = Son()

}

 运行结果

 四、子类拓展

        在继承自父类的基础上,子类可以进行函数、变量、能力等的拓展

在以上基础上给子类扩展新函数

class Son <: Father {
    //子类的构造依赖于父类的构造函数
    static init() {
        println("3.子类的静态构造函数")
    }
    Son() {
        //分两种情况,当父类有默认的参数的时候,需要显式的写出super(具体参数)反之则可省略super()
        super(1) //访问父类的主构造函数
        println("4.子类的主构造函数")
    }
    public func newpower(){
        println("子类的拓展")
    }
}

此时父类不能使用子类的扩展 

父类中没有子类的相关扩展

         此时可以通过将父类的继承类型进行转换从而使父类可以使用子类的扩展,使用as关键字进行转换

public func exc1() {
    var father: Father
    father = Son() //声明一个父类变量同时绑定子类
    var a1 = (father as Son).getOrThrow()//将父类转换为子类
    a1.newpower()
}

 

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐