继承:
java :默认类可以被继承,使用extend关键字继承父类。
kotlin:默认所有非抽象类是不可被继承(相当于java中在类前声明final关键字),需 要在class前加入open关键字。子类继承父类使用 “:”代替“extend”及“implement”关键字。
例如:
person 类前声明open

Student类继承Person类,使用符号 “:”

注意:创建的类中 Student、sno、grade和person类中属性相比颜色暗,说明并未创建实例或并未被其他类和方法使用到(可以在检查代码时注意一下)。
在删除person类后的“()”时出现了报错
如下图:

原因:Student类在初始化时必须调用父类的构造函数,而Person的主构造函数并未进行书写,所以使用系统默认的无参构造函数即“()”,所以省去“()”时会报错。
构造函数
主构造函数:
1、每个类默认不带参数的主构造函数(可以显式指明参数,
如下图在Person类后加上“(private val name:String, private val age : Int)”,括号内为主构造函数)

2、init结构体,主构造函数只声明参数,无函数体,(函数逻辑可以在类中加入init{}结构体)

3、如果父类的主构造函数含有参数,则子类继承时必须要加上父类的主构造函数。
(1)、在继承的时候,在父类构造函数中传入具体的字段,创建出的student类中的name和age会有初始值。此时创建Student实例时只需要传入sno以及grade两个值


(2)、子类继承不设置父类初始值,而是在创建实例时传入值。则创建实例时需要传入全部的属性值,父类调用构造函数时获得子类的传入值。


注意:这里子类的构造函数中,name和age前不能使用val和var关键字声明,因为会和父类中的声明冲突。(如果要改变父类属性的类型,可以将属性open之后在子类主构造函数中override进行修改)
次构造函数
使用constructor关键字进行定义,对于一个类,可以存在多个次构造函数,但只有一个主构造函数。
写法如下:

其中,this(参数s)分别指代和子类参数对应的主构造函数以及次构造函数。加入次构造函数后,可以分别处理三种不同参数方法去创建实例。

特殊形式:只有次构造函数,没有主构造函数

因为子类自己并没有在主构造函数,在继承的父类后面不需要加“()”,因为自己没有主构造函数,在创建次构造函数的时候使用super调用父类的主构造函数。