仓颉面向对象的封装、继承、多态、抽象
var base2: Root = Base("base2")//动态绑定(以Root为类型的对象=子类对象)println("这是一个父类对象"+value)//创建父类对象时执行。println("这是一个子类对象"+value)//创建子类对象时执行。println("这是一个子类对象"+value)//创建子类对象时执行。println("父类的静态构造函数")//优先执行。println
抽象类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了

更多推荐


所有评论(0)