文章参考

class KotlinClass {}
/*** 空类
*/
class EmptyClass

类的修饰符

1)classModifier: 类属性修饰符,标示类本身特性

  • abstract // 抽象类
  • final // 类不可继承,默认属性
  • enum // 枚举类
  • open // 类可继承,类默认是final的
  • annotation // 注解类

2)accessModifier: 访问权限修饰符

  • private // 仅在同一个文件中可见
  • protected // 同一个文件中或子类可见
  • public // 所有调用的地方都可见
  • internal // 同一个模块中可见

1、构造函数

1)主构造函数

定义

class PersonEntity constructor(name: String, sex: String, age: Int) {private val TAG: String = "PersonEntity"private var mName: String = nameprivate var mSex: String = sexprivate var mAge: Int = ageinit {Log.i(TAG, "初始化 : $mName   $mSex   $mAge")}fun display() {Log.i(TAG, "个人信息 : $mName   $mSex   $mAge")}
}

使用

val person1 = PersonEntity("Alex", "man", 24)
person1.display()

输出日志

2)次构造函数

定义

class PersonEntity constructor(name: String) {private val TAG: String = "PersonEntity"private var mName: String = nameprivate var mSex: String = "xxx"private var mAge: Int = -1init {Log.i(TAG, "主构造函数初始化 : $mName   $mSex   $mAge")}constructor(name: String, sex: String) : this(name) {mSex = sexLog.i(TAG, "次构造函数(2个参数)初始化 : $mName   $mSex   $mAge")}constructor(name: String, sex: String, age: Int) : this(name, sex) {mAge = ageLog.i(TAG, "次构造函数(3个参数)初始化 : $mName   $mSex   $mAge")}fun display() {Log.i(TAG, "个人信息 : $mName   $mSex   $mAge")}
}

使用

val person1 = PersonEntity("Alex", "man", 24)
person1.display()

日志输出

2、getter 和 setter

  • getter 和 setter 都是可选
  • val不允许设置setter函数,因为它是只读的

注:Kotlin 中类不能有字段。提供了 Backing Fields(后端变量) 机制,备用字段使用field关键字声明,field 关键词只能用于属性的访问器。

定义

class StudentEntity {val TAG: String = "StudentEntity"var name: String? = ""get() = field?.toUpperCase()set(value) {field = if (TextUtils.isEmpty(value.toString())) {"xxx"} else {value}}var age: Int? = 0get() {return if (field?.toInt() == 0) {-1} else {field?.toInt()}}fun display() {Log.i(TAG, "$name    $age")}
}

使用

val student1 = StudentEntity()
student1.name = ""
student1.age = 0
student1.display()
student1.name = "Alex"
student1.age = 24
student1.display()

日志输出

3、常用类

1)抽象类

  • 类和属性若想被继承,需要用关键字open标注
  • 抽象类或抽象成员则无需open标注

父类 abstract

/*** 抽象类*/
abstract class Parent {//可继承方法open fun p() {}//抽象方法abstract fun p2()
}

子类

class Child : Parent() {override fun p() {super.p()}override fun p2() {TODO("Not yet implemented")}}

父类 open

open class Parent {//可继承方法open fun p() {}
}

子类

class Child : Parent() {override fun p() {super.p()}
}

2)嵌套类

注:嵌套类无法直接使用外部类的属性

定义

/*** 外部类*/
class ExternalClass {private var externalArg: String? = "external Arg"fun externalFun() = externalArg/*** 嵌套类*/class NestClass {private var nestArg: String? = "nest arg"fun nestFun() = nestArg//fun getExternalArg() = externalArg  //会报错}
}

使用

val externalClass = ExternalClass()
var externalArg = externalClass.externalFun()
Log.i(TAG, "externalArg : $externalArg")val nestClass = ExternalClass.NestClass()
var nestArg = nestClass?.nestFun()
Log.i(TAG, "nestArg : $nestArg")

日志输出

3)内部类

  • 内部类使用 inner 关键字标注
  • 内部类可直接使用外部类的属性

定义

/*** 外部类*/
class ExternalClass {private var externalArg: String? = "externalArg"/*** 内部类*/inner class InternalClass {private var internalArg: String? = "internalArg"fun getInternalArg() = internalArgfun getExternalArg1() = externalArgfun getExternalArg2(): String? {var e = this@ExternalClassreturn e.externalArg}}
}

使用

val internalClass = ExternalClass().InternalClass()
val internalArg = internalClass.getInternalArg()
val externalArg1 = internalClass.getExternalArg1()
val externalArg2 = internalClass.getExternalArg2()
Log.i(TAG, "internal Arg : $internalArg")
Log.i(TAG, "external Arg 1 : $externalArg1")
Log.i(TAG, "external Arg 2 : $externalArg2")

日志输出

4)内部匿名类

接口

/*** 接口*/
interface CalculateInterface {fun calculate(result : Int)
}

内部匿名类

class CalculateClass constructor(x: Int, y: Int) {private var a: Int = xprivate var b: Int = yfun add(calculateCallback: CalculateInterface) {var result: Int = a + bcalculateCallback.calculate(result)}
}

使用

var calculateClass = CalculateClass(2, 3)
calculateClass.add(object : CalculateInterface {override fun calculate(result: Int) {Log.i(TAG, "result : $result")}
})

日志输出

Kotlin学习笔记-3 --- 类与对象相关推荐

  1. Python学习笔记 (类与对象)

    Python学习笔记 (类与对象) 1.类与对象 面向对象编程语言类: 一个模板, (人类)-是一个抽象的, 没有实体的对象: (eg: 张三, 李四) 属性: (表示这类东西的特征, 眼睛, 嘴巴, ...

  2. 冰冰学习笔记:类与对象(上)

    欢迎各位大佬光临本文章!!! 还请各位大佬提出宝贵的意见,如发现文章错误请联系冰冰,冰冰一定会虚心接受,及时改正. 本系列文章为冰冰学习编程的学习笔记,如果对您也有帮助,还请各位大佬.帅哥.美女点点支 ...

  3. 冰冰学习笔记:类与对象(下)

    欢迎各位大佬光临本文章!!! 还请各位大佬提出宝贵的意见,如发现文章错误请联系冰冰,冰冰一定会虚心接受,及时改正. 本系列文章为冰冰学习编程的学习笔记,如果对您也有帮助,还请各位大佬.帅哥.美女点点支 ...

  4. Java学习笔记_类和对象

    ·类:是一组相关属性和行为的集合,可以看成是一类事务的模板,使用事物的属性特征和行为特征来描述该类事物. ·属性:该事物的状态信息 ·行为:就是该事物能够做什么 ·对象:一类事物的具体体现,对象是类的 ...

  5. unity让对象作为参数_C#+Unity学习笔记:类与对象

    参考文献 蜜酒厅通讯社 游戏部 石中居士 对象(object):有状态.行为和身份的东西. 状态(state):表示物体特征的信息,可以用来跟踪对象的状态. 属性(properties):因为编程人员 ...

  6. Java学习笔记1——类和对象

    面向对象 对象:万物皆对象 面向对象 类:模子,属性+方法,类是对象的类型,是具有相同属性和方法的一组对象的集合 对象属性:对象拥有的各种特征,"对象有什么" 对象方法:对象执行的 ...

  7. Head First Java学习笔记(2):类与对象

    类 1.类是定义同一类所有对象的变量和方法的蓝图或原型. 2.实例变量的值由类的每个实例提供.当创建类的实例时,就创建了这种类型的一个对象,然后系统为类定义的实例变量分配内存.然后可以调用对象的实例方 ...

  8. java 由接口构造对象_Java学习笔记04——类和对象|抽象和接口|构造方法与继承...

    六.Java类 1.  Java中用关键字class来创建类. 2.  类中属性和方法称为类的成员;类的声明和方法要在同一个文件内,不同于C++. 3.  类的定义: [] class [extend ...

  9. C_PlusPlus学习笔记 - 3_类与对象 (C++语言程序设计【第三版】 郑莉等,清华大学出版社)

    3--类与对象 在我们熟悉的现实世界中,一切事物都是 对象 .对象可以是有形的,也可以是无形的. 对象可以是一个个体,也可以是由诸多其他对象组成. C++支持这种抽象,将抽象后的数据和函数封装在一起, ...

最新文章

  1. 收藏|最优论文+代码查找神器,覆盖AI全领域(966个ML任务、8500+论文)
  2. Python组织文件 实践:将文件的不同版本备份为ZIP文件
  3. 牛客 - Prize(bitset优化暴力)
  4. hadoop--Yarn资源调度器的基础架构、工作机制 与 作业提交全过程
  5. ASP.NET验证码的实现
  6. 【Python】数据转换利器
  7. Linux 命令(55)—— netstat 命令
  8. linux的文件系统简单介绍
  9. Raki的读paper小记:Star-Transformer
  10. 解决库仑计初始化卡死问题
  11. 【Android】Gradle 下载地址修改
  12. java里oop思想_Java OOP 思想解析
  13. 最新win10安装版激活方法 一键激活win10
  14. java中的URLEncoder和URLDecoder类
  15. 分享一些网站有免费的pdf书籍
  16. airpods版本号_怎么看airpods版本号 苹果airpods查看固件版本教程详解
  17. 前端网页水印实现方法
  18. performance 优化
  19. Android版简历(四)
  20. Android判断网络状态是否断开

热门文章

  1. 亚马逊婴儿围栏CPC认证,ASTMF1004、ASTMF406、CPSIA测试标准办理
  2. 键盘的后退键导致页面关闭
  3. IPCC呼叫中心解决案例   一嗨租车
  4. 人人车否认破产称地方经营型模式升级为合伙人模式
  5. Android开发自定义UI组件
  6. 微软对联服务器关闭了吗,新浪与微软签中文对联生成器许可协议
  7. 等比数列等差数列求和
  8. 马斯京根法matlab程序,(一)马斯京根流量演算法
  9. 电信互联网卡套餐一览表2020_2020网安周:中国电信全新思路应对移动互联网新威胁...
  10. 对一次钓鱼事件的分析