Kotlin 中的对象与类
面向对象编程中通常使用类和对象特性,记为OOP。
面向对象编程是一种编程方法,其中继承、多态、抽象和封装是面向对象编程的四个基本原则。
支持面向对象编程的语言示例包括 Kotlin、Java、Python、JavaScript、TypeScript 等。
类的主要优点是它们帮助我们模拟真实的事物和对象,并帮助我们创建尽可能多的不同情况,这些情况具有不同的行为和不同的状态。
例如,您可能想要创建一个应用程序来帮助您设计汽车; 我们知道有不同类型的汽车,它们有不同的状态,例如颜色、座位数等。
为实现这一点,我们使用一个类来创建一个汽车原型,然后根据这个原型,我们可以创建具有不同状态的汽车。 在本篇文章中,我们将学习如何在 Kotlin 中使用类和对象。
在 Kotlin 中创建单例对象
在 Kotlin 中创建对象的方式多种多样,可以以不同的形式存在。 在这个例子中,我们将学习如何创建一个静态对象。
打开 IntelliJ 开发环境并选择 File > New > Project。 在打开的窗口中,输入项目名称 kotlin-objects-and-classes,在 Language 部分选择 Kotlin,在 Build system 部分选择 IntelliJ。
在kotlin文件夹下新建一个Main.kt文件,将以下代码复制粘贴到文件中。
object DBConnection{
private const val url = "http://localhost";
private const val port = 8080;
private const val DBName = "customerDB";
override fun toString(): String {
return "Connected to database $DBName using port $port at $url";
}
}
fun main(){
println(DBConnection.toString());
}
在这个例子中,我们创建了一个类的静态实例,尽管我们没有定义任何类,但是如果我们将这段代码反编译为Java,我们会发现在后台创建了一个类并返回了一个单例。
当我们将此对象定义为静态类实例时,我们指的是单例,这意味着在应用程序的生命周期中只会创建该对象的一个副本。
请注意,您可以在不对其进行任何调用的情况下调用该对象的成员函数和变量,如 main()
函数所示。
我们只需要附加 . 对象名称上的符号来调用和进行任何调用,就像我们对 toString()
方法所做的那样。 运行上面的示例,并注意它按预期工作。
Connected to database customerDB using port 8080 at http://localhost
在 Kotlin 中使用类创建对象
我们已经提到类可以帮助我们模拟现实世界的事物及其行为,从而为这些事物创建蓝图。
实例是从蓝图创建的不同对象,下面的例子展示了如何创建类和类的实例。
注释掉前面的示例,然后将以下代码复制并粘贴到 Main.kt 文件中。
class Employee(private val firstName: String,
private val lastName: String,
private val salary: Number){
override fun toString(): String {
return "$firstName $lastName earns a salary of $$salary"
}
}
fun main(){
val john = Employee("john","doe",60000);
println(john.toString());
}
在此示例中,我们使用 class 关键字创建了员工的蓝图,这是创建类时始终使用的语法。
该类具有三个属性:firstName、lastName 和 salary,以及一个返回员工详细信息的方法 toString()。
在 main 方法中,我们通过调用类名 Employee()
创建了一个员工对象,也称为构造函数,并传递了客户的具体属性。
我们可以通过再次调用构造函数并传递不同的属性来创建不同的对象来创建任意数量的实例。 运行此示例以验证它是否按预期工作。
john doe earns a salary of $60000
在 Kotlin 中创建 Companion 对象 在第一个例子中,我们看到了如何创建一个在其整个生命周期中只有一个副本且不属于任何类的静态对象。
在类中的静态中,我们可以使用伴随对象创建属于类的静态属性和函数。 下面的例子展示了如何实现这一点。
注释掉前面的示例,然后将以下代码复制并粘贴到 Main.kt 文件中。
class Customer(private val name: String,
private val email: String,
private val orderItem: String){
companion object{
const val creditCard = 1
}
override fun toString(): String {
return "$name bought a $orderItem using the email $email";
}
fun getName(): String{
return this.name;
}
}
fun main(){
val customer = Customer("mary", "mary@gmail.com", "watch")
println(customer.getName()+" has "+ Customer.creditCard+ " credit card")
println(customer.toString())
}
注意,静态属性和函数是在伴生对象中定义的,而伴生对象是在类中定义的。
当您想要访问静态属性和函数时,我们使用与第一个示例中相同的方法。
例如,Customer.creditCard 用于访问类的静态属性 creditCard。 运行此示例以验证它是否按预期工作。
mary has 1 credit card
mary bought a watch using the email mary@gmail.com
在 Kotlin 中创建数据类
注释掉前面的示例,然后将以下代码复制并粘贴到 Main.kt 文件中。
import java.math.BigDecimal
data class Product(val productName: String,
val productPrice: BigDecimal);
fun main(){
val product = Product("watch", BigDecimal("457.65"))
println(product.toString());
}
数据类用于保存数据并使用数据关键字创建,数据关键字添加在类关键字之前。
创建数据类有一些条件,包括确保主构造函数至少有一个参数,确保使用 val 或 var 声明参数,并且数据类不能是开放的、密封的、抽象的或内部的。
数据类可帮助开发人员避免代码中的样板代码,因为它会生成与 toString()、equal()、hashCode() 等类一起使用的常用函数。
在此示例中,我们为产品创建了一个数据类,当我们调用 toString() 方法时,客户的详细信息将免费返回给我们。 运行此示例以确保它按预期工作。
Product(productName=watch, productPrice=457.65)
总结
本篇文章教我们如何在 Kotlin 中和类中创建不同类型的对象。 涵盖的主题包括创建单例对象、使用类创建对象、创建伴随对象以及创建数据类。
相关文章
如何在 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 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,