继承与构造函数

继承:

java :默认类可以被继承,使用extend关键字继承父类。

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

例如:

person 类前声明open

person类

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

Student类

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

在删除person类后的“()”时出现了报错

如下图:

报错

原因:Student类在初始化时必须调用父类的构造函数,而Person的主构造函数并未进行书写,所以使用系统默认的无参构造函数即“()”,所以省去“()”时会报错。



构造函数

主构造函数:

1、每个类默认不带参数的主构造函数(可以显式指明参数,

如下图在Person类后加上(private val name:String, private val age : Int)”,括号内为主构造函数)

显式构造函数

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

init结构体

3、如果父类的主构造函数含有参数,则子类继承时必须要加上父类的主构造函数。

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

继承的时候直接给父类赋初始值


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

子类赋值全部初始值


传入参数不同

注意:这里子类的构造函数中,name和age前不能使用val和var关键字声明,因为会和父类中的声明冲突。(如果要改变父类属性的类型,可以将属性open之后在子类主构造函数中override进行修改)

次构造函数

使用constructor关键字进行定义,对于一个类,可以存在多个次构造函数,但只有一个主构造函数。

写法如下:

多个次构造函数

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


三种不同的实现方法

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

无主构造函数

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容