Kotlin的类成员包括:成员属性,成员方法,伴生对象和静态属性。

1.成员属性

kotlin对类成员属性声明采取了一种简洁的方式:属性字段和构造函数的入参一一对应,那么抛弃Java中那种this.属性和get/set的操作,考虑让编译器自动对属性进行命名和赋值。这样就有了下面的kotlin写法:

class Person(var age:Int,val sex:Int = 0) {}

如果某个字段不是入参同名属性,需要在类内部显示声明该属性字段。

class Person(var age: Int, val sex: Int = 0) {//新增字段sexAliasvar sexAlias: Stringinit {sexAlias = if (sex == 0) "阳" else "阴"}}//外部调用sexAlias
var person = Personn(20,0)
println("------> sexAlias = ${person.sexAlias}")

2.成员方法

方法的定义使用关键字"fun",方法返回类型使用“:+数据类型”跟在方法名后,如下示例:

class Person(var age: Int, val sex: Int = 0) {var sexAlias: Stringinit {sexAlias = if (sex == 0) "阳" else "阴"}fun getResponse(name: String): String {return "你好!$name,我今年${age}岁了"}
}//调用方法getResponse
var person = Person(20,0)
var response = person.getResponse("小明")
println("-------> response:${response}")

3.伴生对象

伴生对象使用关键字“companion”,它是用来表示类内部的对象声明(思考之前调用Person中属性都必须先声明实例化Person才可以)。
有的书中写到可以将其与Java中的staic属性对比,的确kotlin提供的伴生对象在行为上与Java的static一样,甚至在JVM平台使用
注解@JvmStatic可以将伴生对象生成为真正的静态方法或字段,但伴生对象在运行时候仍然是真实对象的实例成员。

class Person(var age: Int, val sex: Int = 0) {var sexAlias: Stringinit {sexAlias = if (sex == 0) "阳" else "阴"}fun getResponse(name: String): String {return "你好!$name,我今年${age}岁了"}companion object Strength {fun strengthIsStrong(sexAlias: String): String {var answer: String = when (sexAlias) {"阳" -> "一般男性力气更大""阴" -> "一般女性力气较小"else -> "无法比较"}return answer}}
}//调用伴生对象
var result = Person.strengthIsStrong("阳")
println("------> result = ${result}")

伴生对象的初始化是在相应的类被加载(解析)时,这一点也与Java中的staic{}相同。

4.静态属性

同样在伴生对象中,我们可以定义伴生对象的相关属性。

class Person(var age: Int, val sex: Int = 0) {var sexAlias: Stringinit {sexAlias = if (sex == 0) "阳" else "阴"}fun getResponse(name: String): String {return "你好!$name,我今年${age}岁了"}companion object Strength {//定义伴生对象属性val MALE = 0val FEMAL = 1val UNKNOWN = -1fun strengthIsStrong(sexAlias: String): Int {var answer: Int = when (sexAlias) {"阳", "男" -> MALE"阴", "女" -> FEMALelse -> UNKNOWN}return answer}}
}

5.总结

  • 类中包括成员属性,成员方法,伴生对象;
  • kotlin中成员属性主要时删除了冗余的同名属性声明语句,删除了冗余的同名属性赋值语句,删除了冗余的get/set方法;
  • 非入参属性需要在类内部显示声明;
  • 伴生对象使用关键字companion修饰;
  • 利用伴生对象可以实现类似Java中static的静态属性功能;
  • 类加载时候会运行伴生对象代码块。

Kotlin学习(6)-类和对象之类成员介绍相关推荐

  1. Kotlin学习笔记——类和对象

    推荐kotlin学习书籍 下载链接: https://pan.baidu.com/s/19b5WYDD3Yqh1CAsRvpUsqQ 提取码获取方式:扫描关注下面微信公众号,回复关键字: kotlin ...

  2. Python面向对象2:类与对象的成员分析及self

    # 3. 类和对象的成员分析- 类和对象都可以存储成员,成员可以归类所有,也可以归对象所有- 类存储成员时使用的是与类关联的一个对象- 独享存储成员是是存储在当前对象中- 对象访问一个成员时,如果对象 ...

  3. 【C++学习】类和对象(中)一招带你彻底了解六大默认成员函数

    前言:在之前,我们对类和对象的上篇进行了讲解,今天我们我将给大家带来的是类和对象中篇的学习,继续深入探讨[C++]中类和对象的相关知识!!! 目录 1. 类的6个默认成员函数 2. 构造函数 2.1概 ...

  4. kotlin学习笔记——类、函数、接口

    1.类 类是空的可以省略大括号, 如: class A(name: String) 注意:kotlin与java的一个不同点,代码句结尾不必加":"号 2.类继承 默认是final ...

  5. Kotlin学习笔记(六) 伴生对象 对象表达式

    2019独角兽企业重金招聘Python工程师标准>>> 一,伴生对象 1.类似于java中的静态方法static class TestCompanion{//伴生对象使用compan ...

  6. Java 入门知识学习笔记 (类和对象)

    一.类和对象的定义及关系 1.类是同一类别对象的抽象定义:可以理解为是某一类具体对象的模子,确定对象将会拥有的特性,包括该类对象具备的属性和方法. 2.对象是对类的一种具体化的客观存在,是对类的具体实 ...

  7. 学习-Java类和对象之static关键字之求圆环面积和周长

    任务描述 本关任务:已知圆环的大圆半径 R 和 小圆半径 r 的长度分别为 32.0 和 10.0,求该圆环的面积和周长. 圆环面积公式为:S=π(R2−r2): 圆环周长公式为:C=2π(R+r). ...

  8. (JAVA学习笔记) 类与对象小结

    1.类与对象 类是一个抽象的模板: 对象是类的一个具体的实例: 2.方法 方法的定义:修饰符,返回类型,方法名,参数列表,异常抛出,返回值. 方法的调用:静态方法,非静态方法,形参和实参,值传递和引用 ...

  9. C#.NET学习笔记 -类,接口,对象

    在开始谈接口和类的总结之前,先来了解接口和类的基本概念.熟悉了概念再来看代码就容易理解些. 先来看类的概念:什么是类? 类是面向对象程序设计的核心,实际上是一种复杂的数据类型.将不同类型的数据和与这些 ...

最新文章

  1. debian 安装_如何在 Debian/Ubuntu 上手动安装安全更新? | Linux 中国
  2. 信息系统项目管理师范围管理
  3. 还在维护吗_你的模具生锈了吗?来了解一下这些防锈维护事项
  4. HTML5期末大作业:一款基于HTML+CSS+JavaScript +Bootstrap 响应式的花店/花卉装饰/花卉网上商店/婚礼花/花束商店购物网站
  5. 英伟达显卡排名天梯图2022
  6. emcy协议_商铺三方租赁协议合同范本
  7. Bezier曲线构造
  8. jQuery slideUp(),slideDown()和slideToggle()示例
  9. 第一篇博客-Sql排名函数DENSE_RANK
  10. 2023秋招大厂经典面试题及答案整理归纳(201-220)校招必看
  11. 三种App软件开发模式:自建、外包、免编程自制,哪一种适合你?
  12. Rect Transform
  13. Hadoop数据本地化
  14. Shiro 权限管理
  15. 软总线源码分析8:传输模块
  16. EFM32芯片被锁解决方法
  17. 关键路径 详解 (前置知识:拓扑排序)
  18. 第6章第23节:文字视觉化:使用图片来诠释文字的涵义 [PowerPoint精美幻灯片实战教程]
  19. 二阶微分方程的matlab解法,以动力学方程为例
  20. 小程序移植公众号网页,laravel,vue

热门文章

  1. 连接跟踪TCP协议状态转换
  2. 蓝牙电子秤方案_IC/PCBA
  3. 概率统计D 01.06 伯努利概型
  4. 一文搞定python绘折线图(标题,自定义刻度范围,xy轴刻度值的大小,垂直xy轴的虚线,标签,图例)
  5. 我的 Mac 终端配置(Mac OSX + iTerm2 + Zsh + Oh-My-Zsh)
  6. 超能粒子炮·改 HYSBZ - 4591
  7. 基于网页网站在线视频点播系统 毕业设计毕设源码毕业论文开题报告参考(1)功能概要
  8. 葛洛夫、盖兹、施振荣、张忠谋、Michael Dell的30岁
  9. 阿克曼移动机器人优势介绍
  10. 大龄计算机考研 考研帮,以自己的亲身经历,献给那些大龄的考研朋友们,加油!...