一、抽象的作用
加强运行时的多态
二、抽象的具体方法
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
}
运行结果