一、继承的作用
继承的作用就是减少子类中共有的属性和函数的定义,减少代码的重复冗余。
二、仓颉继承的语法
仓颉中继承的关键字为<:,一个向左的尖括号和一个冒号组成。
class 儿子类名 <: 父亲类名{}
注意:1.父类需要被继承需要用关键字open修饰,来表示这个类可以被继承。
2.仓颉的继承是单继承,只能继承一个父类,不可以直接继承多个父类。(另外说明可以继 承多个接口在本章中暂不做说明)
根据上述两种情况的对比以及错误提示,仓颉中父类要被继承必须要用open进行修饰。
三、仓颉继承中的一些注意点
1.仓颉继承关系中子类的构造一定依赖于父类构造
如果父类中提供了无参数的主构造函数,子类中的主构造函数可以不用显示的写出super()
如果父类中提供了有参数的主构造函数,子类中的主构造函数必须要显示的写出super(),并且super()里面的参数要和父类中的主构造函数一致。
2.子类会继承父类的变量和方法
open class Employee{
var name : String = ""
var age : Int64 = 0
func showInfo(name:String,age:Int64)
{
println(name)
println(age)
}
}
class Manager <: Employee{
}
main(): Int64 {
var manager : Manager = Manager()
manager.name = "小明"
manager.age = 26
var managerName = manager.name
var managerAge = manager.age
println("经理的姓名:${managerName}")
println("经理的年龄:${managerAge}")
manager.showInfo(managerName, managerAge)
return 0
}
运行结果:
由此可见,Manager子类中并没有定义任何变量及方法,由于子类继承了父类,创建了子类对象后通过对象可以访问到父类的变量及方法并给其赋值,再次印证了通过继承可以减少代码的重复 冗余。
3.子类会扩展父类的能力(子类中有而父类没有)
open class Employee{
var name : String = ""
var age : Int64 = 0
func showInfo(name:String,age:Int64)
{
println(name)
println(age)
}
}
class Manager <: Employee{
func manageWorker()
{
println("经理管理员工")
}
}
main(): Int64 {
var manager : Manager = Manager()
manager.manageWorker()
return 0
}
由此,子类中可单独定义方法,通过创建对象来进行访问,父类中没有,以此达到了扩展能力的作用。