当前位置: 首页 > news >正文

5:kotlin 类(Classes )

kotlin支持面向对象编程,也有雷和对象的概念

要声明一个类需要使用class关键字

class Customer

属性(Properties)

  • 可以在类名后边添加(),在()里边声明属性
class Contact(val id: Int, var email: String)

声明了不可变属性id和可变属性email

  • 可以在()后边添加{},在{}中声明属性
class Contact(val id: Int, var email: String) {val category: String = ""
}

声明了不可变属性id、可变属性email和不可变属性categorycategory设默认值""

建议声明不可变属性,除非在创建对象后需要修改它

()内的一般称为头文件

()内声明属性时可以不使用valvar,但是类实例化后该属性不可见。见实例化

实例化(Create instance)

可以使用构造函数创建一个实例

默认情况下kotlin会使用头文件中定义的参数创建一个构造函数

fun main(){val contact1 = Contact(1, "123@mail.com",  0)val contact2 = Contact(2, order =  1)println(contact1.email)  // 123@mail.comprintln(contact1.id) // 1println(contact1.category) // 122
//    println(contact.order)  // Unresolved reference: ordeprintln(contact2.email)  // abc@mail.comprintln(contact2.id) // 2println(contact2.category) // 122
}

访问属性(Access properties)

实例化contact1.email等方式就属于访问属性

模板字符串可以拼接实例的属性,注意使用${}
println("邮箱是${contact2.email}") //邮箱是abc@mail.com

成员方法(Member functions)

成员函数要定义在类中,调用方法和访问属性类似

class Contact(val id: Int, var email: String = "abc@mail.com", order: Int) {val category: String = "122"fun printEmail() {println("邮箱是${email}")}
}fun main() {val contact = Contact(1, "123@mail.com", 0)contact.printEmail()    // 邮箱是123@mail.com
}

数据类(Data classes)

数据类和普通类相似,但是会额外生成一些成员函数,这些成员函数格式化输出格式,对比实例,复制实例等。

使用`data class``声明一个数据类

data class User(val name: String, val id: Int) 
方法说明
.toString()格式化输出实例的属性
.equals() or ==对实例作比较
.copy()通过一个实例创建里一个实例

toString

data class User(val name: String, val id: Int)fun main(){val user = User("王老吉",1)println(user.toString())    // User(name=王老吉, id=1)
}

equals / ==

data class User(val name: String, val id: Int)fun main(){val user1 = User("王老吉",1)val user2 = User("王老吉",1)val user3 = User("王老吉",2)println(user1.equals(user2))    // trueprintln(user1 == user2)    // trueprintln(user1.equals(user3))    // falseprintln(user1.equals("王老吉"))   // false
}

copy

data class User(val name: String, val id: Int)fun main(){val user = User("王老吉",1)println(user.copy())    // User(name=王老吉, id=1)println(user.copy("加多宝"))    // User(name=加多宝, id=1)println(user.copy(id=2))    // User(name=王老吉, id=2)
}

创建一个新的实例比修改原始实例更安全,因为原始实例的属性不会改变

http://www.lryc.cn/news/247690.html

相关文章:

  • 达梦:【1】达梦常用操作
  • 数字人透明屏幕的技术原理是什么?
  • 提升APP软件的用户体验方法
  • JVM运行时数据区域、对象内存分配、内存溢出异常总结
  • 【C++设计模式】单例模式singleton
  • CVPR 2023 精选论文学习笔记:Post-Training Quantization on Diffusion Models
  • Python基础语法之学习字符串快速格式化
  • Ubuntu22.04 server版本关闭DHCP,手动设置ip
  • 贪心算法(新坑)
  • C 语言头文件
  • MySQL中自增id用完怎么办?
  • C语言常见算法
  • 0-1背包的初始化问题
  • API之 要求接口上传pdf 以 合同PDF的二进制数据,multpart方式上传
  • C语言-求阶乘序列前N项和
  • 3:kotlin 逻辑控制(Control flow)
  • Linux系统之一次性计划任务at命令的基本使用
  • 记录:Unity脚本的编写8.0
  • OpenCV | 模版匹配
  • 【算法刷题】Day7
  • 前端 | iframe框架标签应用
  • linux -系统通用命令查询
  • python炒股自动化(1),量化交易接口区别
  • LeetCode(35)螺旋矩阵【矩阵】【中等】
  • BeanUtil.copyProperties的优化与使用(解决copyProperties null值覆盖问题)
  • Redis基本操作及使用
  • python 继承父类的变量和方法
  • ubuntu22.04新机使用(换源,下载软件,安装显卡驱动,锁屏长亮)
  • 如何给shopify的网址做301跳转
  • Redis之秒杀系统