美文网首页Kotlin篇Android专题
学习Kotlin语言之类和对象

学习Kotlin语言之类和对象

作者: 千夜零一 | 来源:发表于2020-10-20 23:47 被阅读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()函数,并在函数中打印了一句话。

  • 如何对类进行实例化
    val p = person()
      Kotlin中实例化一个类的方式和Java基本类似,只是去掉了new关键字而已。之所以这样设计,是因为当你调用了某个类的构造函数时,你的意图只可能是对这个类进行实例化,因此即使没有new关键字,也能清晰表达出你的意图。
    下面通过代码对p对象进行一些操作。
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类,还需要做两件事情。

  • 第一件事:使Person类可以被继承。
      很多人奇怪,尤其是有Java编程经验的人。一个类本身不就是可以被继承的吗?为什么还要使Person类可以被继承呢?这就是Kotlin不同于Java的地方,在Kotlin中任何一个非抽象类默认都是不可以被继承的,相当于Java中给类声明了final关键字。之所以这么设计,其实和val关键字的原因差不多,因为类和变量一样,最好都是不可变的,而一个类允许被继承的话,它无法预知子类会如何实现,因此可能就会存在一些未知的风险。
      那么如何让Person类可以被继承呢?方法其实很简单,在Person类的前面加上open关键字就可以了。
  open class Person {
      ……
  }
  • 第二件事情:要让Student继承Person类。
    在Java中继承的关键字是extends,而在Kotlin中变成了一个冒号,写法如下:
  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)
    }
}
  • 次构造函数
      任何一个类只能有一个主构造函数,但是可以有多个次构造函数。次构造函数也可以用于实例化一个类,这一点和主构造函数没有什么不同,只不过它是有函数体的。次构造函数使用constructor关键字创建。
      1、改造Person类:
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)

大功告成!

相关文章

  • 学习Kotlin语言之类和对象

    类与对象   Kotlin中也是使用class关键字来声明一个类的,这一点和Java一致。 如何创建类   这里使...

  • Kotlin学习之类

    Kotlin学习之类 @(Kotlin学习) Kotlin在面向对象上具有和Java相似的特征,但是针对不同的情况...

  • kotlin学习笔记之类、对象和接口

    一些关键字 在kotlin中所有的声明默认都是final和public的。 open 如果你想允许创建一个类的子类...

  • Kotlin学习之类与对象

    类与继承 类 Kotlin 中使用关键字 class 声明类 类声明由类名、类头(指定其类型参数、主构造函数等)以...

  • Kotlin之类、对象和接口

    Kotlin的类和接口与Java的类和接口是有一定的区别的。Kotlin的接口是可以包含属性声明。Kotlin默认...

  • Kotlin学习目录

    Kotlin学习目录 一、Kotlin学习之函数和变量二、Kotlin学习之类和属性三、Kotlin学习之枚举和W...

  • Kotlin学习之类与对象3

    委托 由委托实现 委托模式(https://zh.wikipedia.org/wiki/委托模式)已经证明是实现继...

  • Kotlin学习之类与对象2

    泛型 与 Java 类似,Kotlin 中的类也可以有类型参数: 一般来说,要创建这样类的实例,我们需要提供类型参...

  • Kotlin学习之类和继承

    今天开始kotlin学习的第二篇:类和继承1,构造函数Kotlin中的类有一个主构造函数,一个或多个次构造函数,主...

  • Kotlin学习之基础语法

    写在前面的:1,Kotlin学习之基础语法2,Kotlin学习之类和继承3,Kotlin学习之属性和字段4,Kot...

网友评论

    本文标题:学习Kotlin语言之类和对象

    本文链接:https://www.haomeiwen.com/subject/gzvjmktx.html