Kotlin——最详解的类(class)的使用

小说:周先生绑嫁犯法作者:王丁更新时间:2018-09-22字数:76459

这就是两人观念最大的不同,九天玄女是聚集理性和感情于一体之人,看人看事,做人做事是集合理性和感情于一身,所以她就算知道刘皓等人的未来第一时间也不是选择下杀手而是想办法拉拢,缓和。

快视频赚钱

蒂可的大气法则是厉害,这一招更是诡异但是那又如何,他有的是办法对抗。
不过很快他注意到我爱罗和手鞠用看白痴的目光看着他,顿时让他反应过来了,很明心这是为了掩饰他和砂隐忍者村的关系才这么说的,刘皓真正的目的是给我爱罗报仇。

“那么就由我先开始吧,召唤神鹰女郎呈现攻击状态,结束这个回合。”孔雀舞的卡组里面神鹰女郎可是招牌怪兽,就像海马濑人的青眼白龙一样可是放了三张,所以抽到的几率不低,而且她还有很多方法可以召唤出卡组里面的神鹰女郎,所以她一点也不怕自己抽不到自己的招牌主力。

在任何一门面向对象编程的语言里,类(class)是非常基础、但也是非常重要的一项组成,通俗的说就是万般皆对象,而所说的对象就是我们生成的类。Kotlin也是如此,下面详细为大家介绍Kotlin中的类的组成结构、函数、声明等。

目录

一、类的声明

1、关键字

声明类的关键字为class

2、声明格式

class Test{
    // 属性...
    ...
    // 构造函数
    ...
    // 函数
    ...
    // 内部类
   ...
   ...
}

其中:

当类没有结构体的时候,大括号可以省略。即:

class Test

二、类的构造函数

  • Kotlin中,允许有一个主构造函数和多个二级构造函数(辅助构造函数)。其中主构造函数是类头的一部分。
  • 关键字或者构造函数名:constructor(参数)

1、主构造函数

  • 主构造函数是类头的一部分,类名的后面跟上构造函数的关键字以及类型参数。

1.1、举例说明:

class Test constructor(num : Int){
     ...
}

等价于

/*
     因为是默认的可见性修饰符且不存在任何的注释符
     故而主构造函数constructor关键字可以省略
*/
class Test(num: Int){
      ...
}

1.2、构造函数中的初始化代码块

  • 构造函数中不能出现其他的代码,只能包含初始化代码。包含在初始化代码块中。
  • 关键字:init{...}
  • 值得注意的是,init{...}中能使用构造函数中的参数

例:

fun main(args: Array<String>) {
    // 类的实例化,会在下面讲解到,这里只是作为例子讲解打印结果
    var test = Test(1)
}

class Test constructor(var num : Int){
    init {
        num = 5
        println("num = $num")
    }
}

输出结果为:

num = 5

其中,上面的constructor关键字是可以省略的。

1.3、声明属性的简便方法

  • 即在主构造函数中声明。

例:

class Test(val num1 : Int, var num2 : Long, val str : String){
    ...
}

则:相当于声明了3个属性。
其中,var表示变量(可读写),val表示常量(只读)。

1.4、什么时候constructor可以省略

  • 在构造函数不具有注释符或者默认的可见性修饰符时,constructor关键字可以省略。
  • 默认的可见性修饰符时public。可以省略不写。请参见可见性修饰符

例:

// 类似下面两种情况的,都必须存在constructor关键字,并且在修饰符或者注释符后面。
class Test private constructor(num: Int){
}

class Test @Inject constructor(num: Int){
}

2、辅助(二级)构造函数

  • Kotlin中支持二级构造函数。它们以constructor关键字作为前缀。

2.1、声明

例:

class Test{
    constructor(参数列表){

    }
}

2.2、同时存在主构造函数和二级构造函数时的情况

  • 如果类具有主构造函数,则每个辅助构造函数需要通过另一个辅助构造函数直接或间接地委派给主构造函数。 使用this关键字对同一类的另一个构造函数进行委派:

例:

fun main(args: Array<String>) {
    var test1 = Test(1)
    var test2 = Test(1,2)
}

// 这里是为了代码清晰,故而没有隐藏constructor关键字
class Test constructor(num: Int){

    init {
        println("num = $num")
    }

    constructor(num : Int, num2: Int) : this(num) {
        println(num + num2)
    }
}

说明:二级构造函数中的参数1(num),是委托了主构造函数的参数num

可以看出,当实例化类的时候只传1个参数的时候,只会执行init代码块中的代码。当传2个参数的时候,除了执行了init代码块中代码外,还执行了二级构造函数中的代码。

输出结果为:

num = 1
num = 1
3

2.3、当类的主构造函数都存在默认值时的情况

  • JVM上,如果类主构造函数的所有参数都具有默认值,编译器将生成一个额外的无参数构造函数,它将使用默认值。 这使得更容易使用Kotlin与诸如JacksonJPA的库,通过无参数构造函数创建类实例。
  • 同理可看出,当类存在主构造函数并且有默认值时,二级构造函数也适用

例:

fun main(args: Array<String>) {
    var test = Test()
    var test1 = Test(1,2)
    var test2 = Test(4,5,6)
}

class Test constructor(num1: Int = 10 , num2: Int = 20){

    init {
        println("num1 = $num1	 num2 = $num2")
    }

    constructor(num1 : Int = 1, num2 : Int = 2, num3 : Int = 3) : this(num1 , num2){
        println("num1 = $num1	 num2 = $num2 	 num3 = $num3")
    }
}

输出结果为:

num1 = 10    num2 = 20
num1 = 1     num2 = 2
num1 = 4     num2 = 5
num1 = 4     num2 = 5    num3 = 6

说明: 当实例化无参的构造函数时。使用了参数的默认值。

三、类的实例化

  • 创建一个类的实例,需要调用类的构造函数,就像它是一个常规函数一样:

例:

var test = Test()
var test1 = Test(1,2)

其实在上面的例子中就实例化类的运用。
注意:这里和Java不同的点是,没有new

四、类的组成

  • 类的构成由构造函数和初始化代码块、属性(字段)、函数(方法)、嵌套类、内部类、对象声明六部分组成

1、构造函数和初始化代码块

在此篇文章已经讲解,不清楚请再次熟悉下此篇文章中的构造函数模块。

2、属性(字段)

由于篇幅原因,请参见属性(字段)章节。

3、函数(方法)

由于篇幅原因,请参见函数(方法)章节。

4、嵌套类

由于篇幅原因,请参见嵌套类章节。

5、内部类

由于篇幅原因,请参见内部类章节。

6、对象声明

由于篇幅原因,请参见对象声明章节。

五、类的类别

  • 类可详细的分为:密封类、嵌套类、内部类、抽象类、枚举类

1、密封类

由于篇幅原因,请参见密封类章节。

2、抽象类

由于篇幅原因,请参见抽象类章节。

3、枚举类

由于篇幅原因,请参见枚举类章节。

内部类嵌套类已在内部类、嵌套类中讲解过了。

六、类的类别

由于篇幅原因,请参见类的继承章节。

七、总结

关于类的介绍就到这里,不清楚的可以多看看文章。不过也没太大关系,此篇文章大多数都是理论性东西。自己用Kotlin多写写代码就理解、掌握了。

项目源代码

如果各位大佬看了之后感觉还阔以,就请各位大佬随便star一下,您的关注是我最大的动力。
我的个人博客:Jetictors
我的简书:http://www.jianshu.com/u/9877d6088780
我的博客园:http://www.cnblogs.com/Jetictors/

编辑:卓顺海

发布:2018-09-22 02:10:15

当前文章:http://www.leetaemin.cn/sjpa05zdu1.html

淘宝客服兼职真的吗 挂机赚美元软件 住校高中生如何减肥 2018年开什么店最赚钱 张亮麻辣烫加盟多少钱 博客网赚 奖多多彩票网骗局 斗鱼做直播怎么赚钱

24759 99059 11606 77364 64809 4217452951 38963 50011

我要说两句: (0人参与)

发布