Kotlin篇Android专题

学习Kotlin语言之类和对象

2020-10-20  本文已影响0人  千夜零一

类与对象

  Kotlin中也是使用class关键字来声明一个类的,这一点和Java一致。

class Person {
    var name = ""
    var age = 0
    fun eat() {
        println(name + "is eating.He is" + age + "years old.")
    }
}

  这里使用var关键字创建了name和age两个字段,这是因为我们需要在创建对象之后再指定具体的姓名和年龄,而如果使用val关键字的话,初始化之后就不能再重新赋值了。接下来定义了一个eat()函数,并在函数中打印了一句话。

private fun main(){
        val p = Person()
        p.name = "千夜零一"
        p.age = 23
        p.eat() //System.out: 千夜零一is eating.He is23years old.
    }

类的继承

  这是面向对象的另一个极其重要的特征。现在创建Student类,继承自Person类。

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

  现在Student和Person这两个类之间是没有任何继承关系的,想要让Student类继承Person类,还需要做两件事情。

  open class Person {
      ……
  }
  class Student : Person() {
      var son = ""
      var grade = 0
  }

构造函数

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

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

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

  val student = Student("123",5)

  由于构造函数中的参数是在创建实例的时候传入的,不像之前的写法那样还得重新赋值,因此可以将参数全部声明成val。
  你可能会问,主构造函数没有函数体,如果我们想在主构造函数中编写一些逻辑,如何实现呢?Kotlin给我们提供了一个init结构体,所有主构造函数中的路基都可以写在里面:

class Student(val sno: String, val grade: Int) : Person() {
    init {
        println("sno = " + sno)
        println("grade = " + grade)
    }
}
open class Person(val name: String, val age: Int) { }

  2、相应的Student类也做相应改造:

class Student(sno: String,grade: Int, name: String, age: Int) : Person(name, age) {
    constructor(name: String, age: Int) : this("", 0, name, age) {
    }

    constructor() : this("", 0){
    }
}

  这样就拥有了三种方式来对Student类进行实体化,分别是不带参数的构造函数、带2个参数的构造函数和带4个参数的构造函数,对应代码如下:

 val student1 = Student()
 val student2 = Student("千夜零一",23)
 val student3 = Student("123",5,"千夜零一",23)

大功告成!

上一篇下一篇

猜你喜欢

热点阅读