Kotlin 中二级构造函数的使用
构造函数是在面向对象的编程语言中创建对象时自动调用的成员函数。
由于 Kotlin 是一种 OOPS 语言,因此它还使用构造函数进行对象初始化。在 Kotlin 中,有两个构造函数:主构造函数和辅助构造函数。
本文介绍了 Kotlin 中二级构造函数的概念以及如何使用它们。
Kotlin 二次构造函数的历史
直到 2015 年,Kotlin 才支持辅助构造函数。在此之前,开发人员使用其中一种打击技术来解决大多数辅助构造函数用例。
- 在类旁边定义一个工厂方法。
- 定义参数的默认值。
- 使用在另一个对象中定义的工厂方法。
尽管这些技术已经足够好,但仍需要辅助构造函数。随着 2015 年 M11 的推出,Kotlin 开始支持二级构造函数。
Kotlin 二级构造函数
虽然主构造函数提供了一种简洁的方式来初始化一个类,但在扩展它们时,辅助构造函数变得很有必要。此外,辅助构造函数还允许添加初始化逻辑。
虽然我们在一个程序中只能有一个主构造函数,但 Kotlin 允许创建多个辅助构造函数。
我们可以通过 constructor
关键字在 Kotlin 中创建和使用二级构造函数。一个 Kotlin 程序可以有一个或多个辅助构造函数。
通常避免使用辅助构造函数,但它们用于扩展类。原因是它们通过多个构造函数以多种方式帮助初始化单个类。
语法:
class ABC {
constructor(data: String) {
// code
}
为了更好地理解二级构造函数,让我们看下面的例子。我们将为类 Product
创建一个辅助构造函数,它将输出两个整数的乘积。
示例代码:
fun main(args: Array<String>) {
Product(3, 7)
}
class Product {
//Creating a secondary constructor
constructor(x: Int, y:Int){
var i = x * y
println("The product of integers 3 and 7 is: ${i}")
}
}
输出:
在 Kotlin 中创建多个辅助构造函数
我们还可以在 Kotlin 中拥有多个构造函数。编译器调用的许多构造函数中的哪一个是根据传递的参数决定的。
示例代码:
fun main(args: Array<String>) {
Student(11035, "David")
Student(11047,"Steve","New York")
}
class Student {
constructor (std_id : Int, std_name: String ) {
var id: Int = std_id
var name: String = std_name
print("Student's ID is: $id, ")
println("Student's Name is: $name")
println()
}
constructor (std_id : Int, std_name: String, std_city: String) {
var id: Int = std_id
var name: String = std_name
var city: String = std_city
print("Student's ID is: $id, ")
print("Student's Name is: $name, ")
println("Student's City is: $city")
}
}
输出:
从另一个现有的辅助构造函数调用辅助构造函数
我们可以使用现有的辅助构造函数在 Kotlin 中调用辅助构造函数。我们需要使用 this()
函数。
示例代码:
fun main(args: Array<String>){
Product(3,7)
}
class Product {
// using this to call another secondary constructor
constructor(x: Int,y:Int) : this(x,y,5) {
var ProductOfTwo = x * y
println("The product of the two integers is: $ProductOfTwo")
}
constructor(x: Int, y: Int,z: Int) {
var ProductOfThree = x * y * z
println("The product of the three integers is is: $ProductOfThree")
}
}
输出:
从子类中的辅助构造函数调用父类的辅助构造函数
除了从另一个调用辅助构造函数外,我们还可以从子类的构造函数调用父类的辅助构造函数。它类似于继承。
我们需要使用 super
关键字来继承构造函数。
示例代码:
fun main(args: Array<String>) {
childClass(11035, "David")
}
open class parentClass {
constructor (std_id : Int, std_name: String, std_city: String) {
var id: Int = std_id
var name: String = std_name
var city: String = std_city
print("Student's ID is: $id, ")
print("Student's Name is: $name, ")
println("Student's City is: $city")
println()
}
}
class childClass : parentClass {
constructor (std_id : Int, std_name: String):super(std_id,std_name,"New York"){
var id: Int = std_id
var name: String = std_name
print("Student's ID is: $id, ")
println("Student's Name is: $name")
}
}
输出:
相关文章
如何在 Java 中延迟几秒钟的时间
发布时间:2023/12/17 浏览次数:217 分类:Java
-
本篇文章主要介绍如何在 Java 中制造程序延迟。本教程介绍了如何在 Java 中制造程序延时,并列举了一些示例代码来了解它。
如何在 Java 中把 Hashmap 转换为 JSON 对象
发布时间:2023/12/17 浏览次数:187 分类:Java
-
它描述了允许我们将哈希图转换为简单的 JSON 对象的方法。本文介绍了在 Java 中把 Hashmap 转换为 JSON 对象的方法。我们将看到关于创建一个 hashmap,然后将其转换为 JSON 对象的详细例子。
如何在 Java 中按值排序 Map
发布时间:2023/12/17 浏览次数:171 分类:Java
-
本文介绍了如何在 Java 中按值对 Map 进行排序。本教程介绍了如何在 Java 中按值对 Map
进行排序,并列出了一些示例代码来理解它。
如何在 Java 中打印 HashMap
发布时间:2023/12/17 浏览次数:192 分类:Java
-
本帖介绍了如何在 Java 中打印 HashMap。本教程介绍了如何在 Java 中打印 HashMap 元素,还列举了一些示例代码来理解这个主题。
在 Java 中更新 Hashmap 的值
发布时间:2023/12/17 浏览次数:146 分类:Java
-
本文介绍了如何在 Java 中更新 HashMap 中的一个值。本文介绍了如何在 Java 中使用 HashMap 类中包含的两个方法-put() 和 replace() 更新 HashMap 中的值。
Java 中的 hashmap 和 map 之间的区别
发布时间:2023/12/17 浏览次数:79 分类:Java
-
本文介绍了 Java 中的 hashmap 和 map 接口之间的区别。本教程介绍了 Java 中 Map 和 HashMap 之间的主要区别。在 Java 中,Map 是用于以键值对存储数据的接口,
在 Java 中获取用户主目录
发布时间:2023/12/17 浏览次数:218 分类:Java
-
这篇文章向你展示了如何在 Java 中获取用户主目录。本教程介绍了如何在 Java 中获取用户主目录,并列出了一些示例代码以指导你完成该主题。
Java 中 size 和 length 的区别
发布时间:2023/12/17 浏览次数:179 分类:Java
-
这篇文章教你如何知道 Java 中大小和长度之间的区别。本教程介绍了 Java 中大小和长度之间的区别。我们还列出了一些示例代码以帮助你理解该主题。
Java 中的互斥锁
发布时间:2023/12/17 浏览次数:111 分类:Java
-
了解有关 Java 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,