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())
     }
}

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

相关推荐
XiaoLeisj11 小时前
Android Kotlin 全链路系统化指南:从基础语法、类型系统与面向对象,到函数式编程、集合操作、协程并发与 Flow 响应式数据流实战
android·开发语言·kotlin·协程
dapeng287012 小时前
分布式系统容错设计
开发语言·c++·算法
恋猫de小郭12 小时前
2026,Android Compose 终于支持 Hot Reload 了,但是收费
android·前端·flutter
qq_4176950512 小时前
代码热修复技术
开发语言·c++·算法
badhope17 小时前
Mobile-Skills:移动端技能可视化的创新实践
开发语言·人工智能·git·智能手机·github
码云数智-园园18 小时前
微服务架构下的分布式事务:在一致性与可用性之间寻找平衡
开发语言
C++ 老炮儿的技术栈18 小时前
volatile使用场景
linux·服务器·c语言·开发语言·c++
hz_zhangrl18 小时前
CCF-GESP 等级考试 2026年3月认证C++一级真题解析
开发语言·c++·gesp·gesp2026年3月·gespc++一级
Liu6288818 小时前
C++中的工厂模式高级应用
开发语言·c++·算法
IT猿手19 小时前
基于控制障碍函数的多无人机编队动态避障控制方法研究,MATLAB代码
开发语言·matlab·无人机·openclaw·多无人机动态避障路径规划·无人机编队