一、抽象的作用

        加强运行时的多态

二、抽象的具体方法

        1、抽象类

                代码实现

public abstract class Project { //

    //正常定义方法需要有方法体
    public func exec() {
    }
    //定义一个抽象方法,没有方法体,是一个空实现,同时抽象方法必须要被继承
    protected func work(): Unit
}

public class Demo1 <: Project {
    var demoName: String = ""
    //抽象方法和抽象属性设计器都需要重写
    protected override func work(): Unit {
        println("项目子类1")
    }
}

public class Demo2 <: Project {
    var demoName: String = ""
    protected override func work(): Unit {
        println("项目子类2")
    }
}

public func runProject() {
    var a1: Project = Demo1() //此处不可继承父类

    //动态绑定
    a1 = Demo2()
    a1.work()
    a1 = Demo1()
    a1.work()
}

运行结果

 

2、抽象属性设计器

代码实现

public abstract class Project { 

    //正常定义方法需要有方法体
    public func exec() {
    }
    //定义一个抽象属性设计器,有抽象属性设计器的类一定是抽象类
    public mut prop propWork: String
}

public class Demo1 <: Project {
    var demoName: String = ""
    //抽象方法和抽象属性设计器都需要重写
    public mut prop propWork: String {
        get() {
            demoName
        }
        set(newName) {
            //可以直接赋值this.demoName = newName
            //或另增判断条件
            if (newName.startsWith("1")) {
                this.demoName = newName
            } else {
                println("名称不符合条件")
            }
        }
    }
}
main(): Int64 {
    var a1: Project = Demo1()
    a1.propWork = "321" //此时名称不符合条件
    println("名字为:${a1.propWork}")

    return 0
}

 运行结果

 

Logo

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

更多推荐