Kotlin语言之面向对象编程
发布日期:2021-05-06 00:55:40 浏览次数:23 分类:原创文章

本文共 3360 字,大约阅读时间需要 11 分钟。

1. Kotlin语言之面向对象编程


这里定义了一个Person类 , 它哟有 姓名,年龄的成员变量和 eat的成员方法
class Person {    var name = ""    var age = 0    fun eat() {        println("$name is eating. He is $age years old.")    }}
接下来我们来对类进行实例化:Kotlin语言实例化的方式与Java类型, 但去掉了new关键字. 之所以这么设计, 是因为当你调用了某个类的构造函数, 你的意图就是将类进行实例化, 所以即使没有new关键字, 也能够清晰的表达你的意图.

val p = Person()

接下来在main函数中对对象p进行一些操作
fun main() {    val p = Person()    p.name = "Tom"    p.age = 18//    调用p的 eat方法    p.eat()}

运行结果:
在这里插入图片描述


2. 继承与构造函数

Kotlin中一个类默认是不可以被继承的,如果想要让一个类可以被继承,需要主动声明open关键字:

open class Person {

}

要让另一个类去继承Person类,则需要使用冒号关键字:

class Student : Person() {

var sno = ""

var grade = 0

}

现在Student类中就自动拥有了Person类中的字段和函数,还可以定义自己独有的字段和函数

Kotlin将构造函数分为了2种: 主构造函数和次构造函数


2.1 主构造函数

主构造函数是最常用的构造函数, 每个类都会默认的有一个不带参数的主构造函数,可以显示的它指明参数. 主构造函数没有函数体, 直接定义在类名后面即可. 如:

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

代码验证:

fun main() {//  将学生类实例化 并且调用它的study方法    val student = Student("11923020121", 3)    student.study()}//open 表明类是可以被继承的open class Person {    var name = ""    var age = 0    fun eat() {        println("$name is eating. He is $age years old.")    }}//显示的指明学生类的参数class Student(val sno: String, val grade: Int) : Person() {    fun study(){        println("grade is  $grade and sno is $sno")    }}

运行结果:
在这里插入图片描述

如果你想在主构造函数中编写逻辑, 可以使用init结构体, 所有主函数的逻辑都可以写在里面:

测试代码:

fun main() {//  将学生类实例化 并且调用它的study方法    val student = Student("11923020121", 3)//    student.study()}//open 表明类是可以被继承的open class Person {    var name = ""    var age = 0    fun eat() {        println("$name is eating. He is $age years old.")    }}//显示的指明学生类的参数class Student(val sno: String, val grade: Int) : Person() {//    init 这里给主构造方法添加了2个打印语句    init {        println("sno is $grade")        println("grade is $grade")    }    fun study(){        println("grade is  $grade and sno is $sno")    }}

运行结果:
在这里插入图片描述

子类的构造函数调用父类中的哪一个构造函数,在继承的时候通过括号来指定:
class Student(val sno: String, val grade: Int) : Person() {   }
在这里, Person类后面的一对空括号表示Student类的主构造函数在初始化的时候会调用Person类的无参构造函数, 即使在无参的情况下, \这对括号也不能省略.如果我们将Person类改造一下,将姓名和年龄都放在主构造函数中
open class Person(val name:String,val age :Int) {}
那么Student类在继承Person类的时候,就必须给Person类的构造函数传入name和age字段
class Student(val sno:String, val grade:Int, name: String, age: Int) :Person(name, age){    init {        println("sno is $sno")        println("grade is $grade")        println("name is $name")        println("age is $age")    }}
接下来是完整的代码演示
fun main() {    val stu= Student("119230",3,"Tom",18)}open class Person(val name:String,val age :Int) {}class Student(val sno:String, val grade:Int, name: String, age: Int) :Person(name, age){    init {        println("sno is $sno")        println("grade is $grade")        println("name is $name")        println("age is $age")    }}

运行结果:
在这里插入图片描述

2.2 次构造函数

任何一个类都只能有一个主构造函数, 但可以有多个次构造函数, 次构造函数也是用来实例化一个类的, 但它是有自己的函数体的所有次构造函数都必须调用主构造函数(包括间接调用) .代码演示:
class Student(val sno: String, val grade: Int, name: String, age: Int) : Person(name, age) {// 第一个次构造函数    constructor(name: String, age: Int) : this("", 0, name, age) {}    //第二个次构造函数    constructor() : this("", 0) {}    init {        println("sno is $sno")        println("grade is $grade")        println("name is $name")        println("age is $age")    }}
第一个次构造函数:接受name和age参数, 并且通过this调用了 主构造函数第二个次构造函数:空参构造函数下面用创建一些类的实例
fun main() {    val stu1 = Student()    val stu2 = Student("Peter", 19)    val stu3 = Student("119230", 3, "Tom", 18)}


上一篇:Kotlin语法基础之面向对象编程接口的实现
下一篇:Kotlin语言的程序的逻辑控制和循环结构

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2025年03月14日 16时24分24秒