Kotlin(六) 类

目录

创建类

调用类

类的继承------open

构造函数


创建类

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

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

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

调用类

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

Kotlin 复制代码
fun main() {
    val person =Person()
    person.age=10
    person.name="张三"
    person.eat()
}

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

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

类的继承------open

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

Kotlin 复制代码
class Student{
    var sNo=""
    var grade=0
}

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

Kotlin 复制代码
open class Person {
    ...
}

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

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

Kotlin 复制代码
class Student : Person(){
    var sNo=""
    var grade=0
}

构造函数

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

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

Kotlin 复制代码
class Student(val sno:String,val grade:Int) : Person(){

}

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

Kotlin 复制代码
val student = Student("123", 2)

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

Kotlin 复制代码
class Student(var sno: String, var grade: Int) : Person() {
     init {
         println(eat())
     }
}

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

相关推荐
鄃鳕3 分钟前
pyside6 qt 事件循环
开发语言·qt
java1234_小锋6 分钟前
PyTorch2 Python深度学习 - transform预处理转换模块
开发语言·python·深度学习·pytorch2
杨福瑞1 小时前
数据结构:单链表(1)
c语言·开发语言·数据结构
来来走走1 小时前
kotlin学习 基础知识一览
android·开发语言·kotlin
程序员卷卷狗6 小时前
JVM 调优实战:从线上问题复盘到精细化内存治理
java·开发语言·jvm
lly2024066 小时前
ASP Folder:深入解析其功能与使用技巧
开发语言
雪域迷影7 小时前
Go语言中通过get请求获取api.open-meteo.com网站的天气数据
开发语言·后端·http·golang·get
雨白7 小时前
StateFlow 与 SharedFlow:在协程中管理状态与事件
android·kotlin
WAsbry8 小时前
NFC开发系列专栏 - 第三篇:无界面NFC后台服务方案
android·程序员·架构
消失的旧时光-19438 小时前
WebView 最佳封装模板(BaseWebActivity + WebViewHelper)
android·webview