kotlin基础教程之类和继承
发布时间 - 2026-01-11 01:15:07 点击率:次kotlin基础教程之类和继承

类声明
使用class关键字声明类,查看其声明格式:
: modifiers ("class" | "interface") SimpleName
typeParameters?
primaryConstructor?
(":" annotations delegationSpecifier{","})?
typeConstraints
(classBody? | enumClassBody)
最简略的类声明至少包括 modifiers class SimpleName,如:
class Empty
modifiers
包括 classModifier 和accessModifier:
classModifier: 类属性修饰符,标示类本身特性。 abstract //抽象类标示 final //标示类不可继承,默认属性 enum //标示类为枚举 open //类可继承,类默认是final的 annotation //注解类
accessModifier: 访问权限修饰符
private //仅在同一个文件中可见 protected //同一个文件中或子类可见 public //所有调用的地方都可见 internal //同一个模块中可见
构造函数声明
可以声明一个主构造函数(primary constructor)和多个次级构造函数(secondary constructor),二者都是可选的。
primary constructor声明
作为类声明的头部存在,类声明结构:
class User constructor(name:String)
当constructor前无修饰符(如:private)时,constructor可以省略:
class User(name:String)
当是无参构造函数时,整个构造函数部分也可以省略,省略的构造函数默认是public的:
class User
primary constructor 初始化
由于primary constructor不能包含任何代码,因此使用 init 代码块对其初始化,同时可以在初始化代码块中使用构造函数的参数:
class User(name:String){
init{
//初始化..
}
}
可以类中初始化属性:
class User(name:String){
var customName = name.toUpperCase() //初始化属性
}
secondary constructor声明
使用constructor前缀声明,且必须调用primary constructor,使用this关键字:
class User(name:String){
/**secondary constructor**/
constructor(name:String,age:Int):this(name){
//初始化...
}
}
声明构造函数时,允许指定参数默认值,若所有参数都被指定默认值然后编译,编译器会生成一个额外的无参构造函数来使用初始化属性为初始值。
class User(name:String = “”)
作为校验,上述声明方式允许如下调用:
var user = User()
var anotherUser = User("jason")
若构造函数中并非所有参数都有默认值,则不会生成默认无参构造函数:
class User(name:String = "",age = Int)
var user = User() //将无法编译通过
var anotherUser = User("jason",18) //合法声明
实例化
无需new关键字,即可实例化对象:
var user = User()
继承(Inheritance)
Any
所有类都继承该类,提供默认的三个函数:
equals() hashCode() toString()
继承声明
在类的构造函数之后使用 : 标示继承:
class Student(name:String,age:Int):User(name,age){
}
当类未声明构造函数时,继承其他类时,也不需要在primary constructor中显示的声明构造函数,必须在secondary constructor中显示调用父类构造函数,若父类有多个构造函数,可选择其一进行调用:
/**用户基类**/
open class User(name:String){
/**secondary constructor**/
constructor(name:String,age:Int):this(name){
//初始化
}
}
/**子类继承User类**/
class Student:User{
/**构造函数**/
constructor(name:String):super(name){
}
/**另外一个构造函数**/
constructor(name:String,age:Int):super(name,age){
}
}
所有类定义时默认是final属性,不可被继承。若需要继承,使用open关键字进行修饰。
方法重载
方法默认是final的,不可被子类重载,若需要被重载,使用关键词 open 进行修饰,子类重载方法使用 override 关键词:
open class User{
open fun study(){}
fun run(){}
}
class Student:User{
override fun study(){}
}
override修饰的方法,默认是可以被继承的。若希望不被继承,可以使用 final 关键词修饰。
final override fun study(){}
重载规则
当类同时继承类和实现接口,且有相同方法,且相同方法都有实现时,需要在重载方法中调用所继承的方法,使用关键词 super ,T表示所继承或实现的接口:
open class User{
open fun study(){}
}
interface Reading{
fun study(){}
}
class Student:User(),Reading{
override fun study(){
super<User>.study()
super<Reading>.study() //与上者至少二选其一
}
}
当接口未实现方法时,默认为父类User的study方法,不需要调用所继承的方法:
interface Reading{
fun study()
}
class Student:User(),Reading{
override fun study(){
//do nothing
}
}
抽象类
Kotlin中的抽象类允许有abstract修饰的成员方法,非抽象类不允许有抽象方法;
abstract class User{
abstract fun study()
}
class Person{
abstract fun study() // 编译错误
}
抽象类默认是可被继承的,接口是特殊的抽象类,允许有抽象方法:
interface Reading{
abstract fun reading()
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# kotlin教程之类和继承
# kotlin类和继承
# Kotlin类的继承实现详细介绍
# 关键词
# 抽象类
# 子类
# 都有
# 多个
# 默认值
# 修饰符
# 都是
# 若需
# 不需要
# 要在
# 对其
# 希望能
# 可以使用
# 可选
# 另外一个
# 不需
# 不被
# 谢谢大家
# 可选择
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么清理缓存_Laravel optimize clear命令详解
如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环
如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)
再谈Python中的字符串与字符编码(推荐)
Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道
laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法
如何快速搭建高效可靠的建站解决方案?
如何在IIS管理器中快速创建并配置网站?
Laravel中的Facade(门面)到底是什么原理
Laravel怎么实现支付功能_Laravel集成支付宝微信支付
Thinkphp 中 distinct 的用法解析
如何利用DOS批处理实现定时关机操作详解
如何用低价快速搭建高质量网站?
Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】
Laravel如何与Docker(Sail)协同开发?(环境搭建教程)
laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法
如何在万网开始建站?分步指南解析
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
Laravel如何实现数据库事务?(DB Facade示例)
Win11怎样安装网易有道词典_Win11安装词典教程【步骤】
通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】
Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】
晋江文学城电脑版官网 晋江文学城网页版直接进入
如何用狗爹虚拟主机快速搭建网站?
javascript中闭包概念与用法深入理解
Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)
Laravel如何使用Service Container和依赖注入?(代码示例)
如何选择PHP开源工具快速搭建网站?
Laravel怎么连接多个数据库_Laravel多数据库连接配置
简历在线制作网站免费版,如何创建个人简历?
HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】
Laravel如何实现API版本控制_Laravel API版本化路由设计策略
轻松掌握MySQL函数中的last_insert_id()
Android实现代码画虚线边框背景效果
历史网站制作软件,华为如何找回被删除的网站?
Angular 表单中正确绑定输入值以确保提交与验证正常工作
深圳网站制作的公司有哪些,dido官方网站?
免费视频制作网站,更新又快又好的免费电影网站?
Android自定义控件实现温度旋转按钮效果
Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
如何在云主机快速搭建网站站点?
Windows10如何更改计算机工作组_Win10系统属性修改Workgroup
大连 网站制作,大连天途有线官网?
bing浏览器学术搜索入口_bing学术文献检索地址
网站优化排名时,需要考虑哪些问题呢?
Laravel模型事件有哪些_Laravel Model Event生命周期详解
Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
node.js报错:Cannot find module 'ejs'的解决办法

