当前位置: 首页 > news >正文

Kotlin(六) 类

目录

创建类

调用类 

类的继承------open

构造函数


创建类

创建类和创建java文件一样,选择需要创建的目录New→Kotlin File/Class

Kotlin中也是使用class关键字来声明一个类的,这一点和Java一致。现在我们可以在这个类中加入字段和函数来丰富它的功能,这里我准备加入nameage字段,以及一个eat()函数,因为任何一个人都有名字和年龄,也都需要吃饭。

class Person {var name = ""var age =0fun eat(){println(name+age+"岁,正在吃东西")}
}

调用类 

 Person类已经定义好了,接下来我们看一下如何对这个类进行实例化,代码如下所示:

fun main() {val person =Person()person.age=10person.name="张三"person.eat()
}

Kotlin中实例化一个类的方式和Java是基本类似的,只是去掉了new关键字而已。之所以这么设计,是因为当你调用了某个类的构造函数时,你的意图只可能是对这个类进行实例化,因此即使没有new关键字,也能清晰表达出你的意图。Kotlin本着最简化的设计原则,将诸如new、行尾分号这种不必要的语法结构都取消了。

上述代码将实例化后的类赋值到了person这个变量上面,person就可以称为Person类的一个实例,也可以称为一个对象。通过赋值,然后调用eat()函数。一个类的创建和调用就完成了。这也是最基本的面向对象的用法:就是要先将事物封装成具体的类,然后将事物所拥有的属性和能力分别定义成类中的字段和函数,接下来对类进行实例化,再根据具体的编程需求调用类中的字段和方法即可。

类的继承------open

创建一个Student类,加入snograde字段。

class Student{var sNo=""var grade=0
}

在Java中,一个创建的类直接通过extends关键字就可以被继承,但是在Kotlin中是不行的,它默认创建的类无法被继承,需要通过关键字open

open class Person {...
}

加上open关键字之后,我们就是在主动告诉Kotlin编译器,Person这个类是专门为继承而设计的,这样Person类就允许被继承了。

第二件事,要让Student类继承Person类。在Java中继承的关键字是extends,而在Kotlin中变成了一个冒号,写法如下:

class Student : Person(){var sNo=""var grade=0
}

构造函数

任何一个面向对象的编程语言都会有构造函数的概念,Kotlin中也有,但是Kotlin将构造函数分成了两种:主构造函数和次构造函数。

主构造函数将会是你最常用的构造函数,每个类默认都会有一个不带参数的主构造函数,当然你也可以显式地给它指明参数。主构造函数的特点是没有函数体,直接定义在类名的后面即可。比如下面这种写法:

class Student(val sno:String,val grade:Int) : Person(){}

这里我们将学号和年级这两个字段都放到了主构造函数当中,这就表明在对Student类进行实例化的时候,必须传入构造函数中要求的所有参数。比如:

val student = Student("123", 2)

这样定义构造函数的话,如果我们需要再构造函数中写一些逻辑,那就需要用到Kotlin提供一个init构造体

class Student(var sno: String, var grade: Int) : Person() {init {println(eat())}
}

这样类的基本使用就差不多了

http://www.lryc.cn/news/165039.html

相关文章:

  • 蓝桥杯官网练习题(灌溉)
  • 数据结构:树的概念和结构
  • 【GIS】栅格转面报错:ERROR 000864输入栅格: 输入不在定义的属性域内。 ERROR 000863: 无效的 GP 数据类型
  • 32 WEB漏洞-文件操作之文件下载读取全解
  • Linux之history、tab、alias、命令执行顺序、管道符以及exit
  • vcomp100.dll丢失怎样修复?5个靠谱的修复方法分享
  • Vue3自定义指令(directive)
  • 大数据课程L9——网站流量项目的实时业务处理代码
  • 【2023最新B站评论爬虫】用python爬取上千条哔哩哔哩评论
  • mysql设置max_sp_recursion_depth,sql_mode
  • 论文阅读:SERE: Exploring Feature Self-relation for Self-supervised Transformer
  • 遥感数据与作物模型同化应用:PROSAIL模型、DSSAT模型、参数敏感性分析、数据同化算法、模型耦合、精度验证等主要环节
  • Navicat15工具连接PostgreSQL15失败
  • 开源AI家庭自动化助手-手机控制家庭智能家居服务
  • 解决CSS定位错乱/疑难杂症的终极绝招==》从样式污染开始排查
  • 【笔记】《C++性能优化指南》Ch3 测量性能
  • 2023大数据面试总结
  • udev自动创建设备节点的机制
  • 访问局域网内共享文件时报错0x80070043,找不到网络名
  • Java定时器
  • 科普js加密时出现的错误
  • MYSQL优化——B+树讲解
  • Rokid Jungle--Station pro
  • 如何实现微服务
  • MySQL如何进行增量备份与恢复?
  • 微服务框架
  • (matplotlib)如何让各个子图ax大小(宽度和高度)相等
  • python http 上传文件
  • IPO解读:Instacart曲折上市,业务模式如何持续“绚烂”?
  • 使用sql profile 稳定执行计划的案例