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构造函数输入参数直接添加到类名后面;
-
次级构造函数没有函数名称且需要调用主构造函数;
-
构造函数支持默认参数,简化代码。
推荐阅读
-
Kotlin学习(5)-类和对象之类的构造
-
Kotlin学习(6)-类和对象之类成员介绍
-
Day10 java面向对象:对象的定义和使用,构造器,内存分析,类与对象
-
Java对象StringBuffer类-10-StringBuffer类的基本了解和构造方法
-
Python面向对象编程中的类和对象学习教程
-
java通过反射,只需要传了类名和参数,就可以根据不同参数的构造方法实例化对象
-
Java面向对象(1)面向对象的思想概述以及类的介绍,封装和构造方法
-
学习php 一步一步学习PHP5 类和对象
-
Java之反射第十八天( --反射----类的加载--获取对象属性( 成员变量和方法)-- 构造方法 )
-
Python面向对象编程中关于类和方法的学习笔记