欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Kotlin学习(5)-类和对象之类的构造

程序员文章站 2024-03-20 23:28:52
...

1.类的简单定义

Kotlin中定义类依旧使用关键字"class",类声明一般由类名、类头(指定其类型参数、主构造函数)和花括号组成(类主体)。

class Person() {
    //初始化块
    //初始化块仅仅定义了初始操作,它无法定义输入参数
    init {
        println("--------> init() block.")
    }
}

类创建好后,就可以实例化它。具体实例化一个类如下:

//实例化Person对象,省略了new关键字
var person = Person()

上面的init{}块又是什么?在Kotlin中构造函数分为主构造函数和次构造函数,主构造函数不能包含任何的代码,所以初始化的代码就需要放到init{}中(这与Java的方式很不一样)。

//Kotlin的方式
//主构造函数没有任何注解或者可见性修饰符,可以省略这个 constructor 关键字
class Person constructor(age: Int) {
    var age: Int
    init {
        //将age赋值给本类中的变量age
        this.age = age
    }
}


//Java的方式
public class Person {
    private int age;
    /**
     * 构造函数
     */
    public Person() {
    
    }

    /**
     * 构造函数
     * @param age
     */
    public Person(int age) {
        this.age = age;
    }
}

2.类的构造函数

Java中类的构造函数与类同名(见上面的“Java的方式”),但在Kotlin中并没有继续这样表示。Kotlin中构造函数的输入参数直接添加到类名后面,如上面Person类的age输入参数。但这样带来了另一个问题——如何创建多个构造函数?Java中一般根据参数的个数(类型)来实现,Kotlin中则使用上面提到的次级构造函数。
Kotlin支持一个主构造函数+一个(多个)次级构造函数。

class Person(age: Int) {
    init {
        println("------>init{} age = ${age}")
    }
    /**
     * 次级构造函数
     */
    constructor(age: Int, sex: Int) : this(age) {
        println("------>age = ${age} --- sex = ${sex}")
    }
}

//实例化Person对象
var person = Person(20)
var person2 = Person(20,0)

代码示例中,次级构造函数没有函数名,直接使用了关键字constructor表示。此外,次级构造函数主动调用了主构造函数——":this(age)"这句代码,这表明次级构造函数是由主构造函数派生得来。
Kotlin类构造函数还支持默认参数,这有助于进一步简化代码。如果想要在Java类中实例化Person对象,需要添加注解@JvmOverloads constructor。

 //默认sex=0
class Person(age: Int, sex: Int = 0) {
    init {
        println("------>init{} age = ${age} --- sex = ${sex}")
    }
}

//Java类中实例化Person对象
//因为添加了@JvmOverloads注解,constructor关键字不可以省略
class Person @JvmOverloads constructor(age: Int, sex: Int = 0) {
    init {
        println("------>init{} age = ${age} --- sex = ${sex}")
    }
}


3.【总结】

  • Kotlin中实例化对象省略new关键字;

  • Kotlin中类初始化使用init{};

  • Kotlin构造函数输入参数直接添加到类名后面;

  • 次级构造函数没有函数名称且需要调用主构造函数;

  • 构造函数支持默认参数,简化代码。