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

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

相关推荐
一笑的小酒馆8 小时前
AndroidKMP之网络请求
android
小灰灰搞电子9 小时前
Rust+Slint 实现动态消息提示框源码分享
开发语言·后端·rust
传奇开心果编程11 小时前
【Rust入门知识点学与练】第21课:Trait 进阶 Advanced Traits
开发语言·学习·rust
新时代牛马11 小时前
字符设备驱动完整篇:从 cdev_add、file_operations 到chrdev_open 与排障
开发语言·python
swordbob11 小时前
ReentrantLock 与 AQS 完整学习手册
java·开发语言
aqi0011 小时前
鸿蒙版本的JSBridge兼容与安卓配套的H5啦
android·华为·harmonyos·鸿蒙·移动应用
白山编程大哥12 小时前
Java OutputStreamWriter 详解:从字符到字节的桥梁
java·开发语言·python
事圆则缓12 小时前
MVVM 的理解与设计
android·android jetpack
shmily麻瓜小菜鸡13 小时前
JavaScript / TypeScript 易踩坑知识点 —— 异步编程类
开发语言·javascript·typescript
七夜zippoe13 小时前
为什么 2026 年每个 Java 团队都该懂 AI Agent
java·开发语言·人工智能