Kotlin学习笔记-3 --- 类与对象
文章参考
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 --- 类与对象相关推荐
- Python学习笔记 (类与对象)
Python学习笔记 (类与对象) 1.类与对象 面向对象编程语言类: 一个模板, (人类)-是一个抽象的, 没有实体的对象: (eg: 张三, 李四) 属性: (表示这类东西的特征, 眼睛, 嘴巴, ...
- 冰冰学习笔记:类与对象(上)
欢迎各位大佬光临本文章!!! 还请各位大佬提出宝贵的意见,如发现文章错误请联系冰冰,冰冰一定会虚心接受,及时改正. 本系列文章为冰冰学习编程的学习笔记,如果对您也有帮助,还请各位大佬.帅哥.美女点点支 ...
- 冰冰学习笔记:类与对象(下)
欢迎各位大佬光临本文章!!! 还请各位大佬提出宝贵的意见,如发现文章错误请联系冰冰,冰冰一定会虚心接受,及时改正. 本系列文章为冰冰学习编程的学习笔记,如果对您也有帮助,还请各位大佬.帅哥.美女点点支 ...
- Java学习笔记_类和对象
·类:是一组相关属性和行为的集合,可以看成是一类事务的模板,使用事物的属性特征和行为特征来描述该类事物. ·属性:该事物的状态信息 ·行为:就是该事物能够做什么 ·对象:一类事物的具体体现,对象是类的 ...
- unity让对象作为参数_C#+Unity学习笔记:类与对象
参考文献 蜜酒厅通讯社 游戏部 石中居士 对象(object):有状态.行为和身份的东西. 状态(state):表示物体特征的信息,可以用来跟踪对象的状态. 属性(properties):因为编程人员 ...
- Java学习笔记1——类和对象
面向对象 对象:万物皆对象 面向对象 类:模子,属性+方法,类是对象的类型,是具有相同属性和方法的一组对象的集合 对象属性:对象拥有的各种特征,"对象有什么" 对象方法:对象执行的 ...
- Head First Java学习笔记(2):类与对象
类 1.类是定义同一类所有对象的变量和方法的蓝图或原型. 2.实例变量的值由类的每个实例提供.当创建类的实例时,就创建了这种类型的一个对象,然后系统为类定义的实例变量分配内存.然后可以调用对象的实例方 ...
- java 由接口构造对象_Java学习笔记04——类和对象|抽象和接口|构造方法与继承...
六.Java类 1. Java中用关键字class来创建类. 2. 类中属性和方法称为类的成员;类的声明和方法要在同一个文件内,不同于C++. 3. 类的定义: [] class [extend ...
- C_PlusPlus学习笔记 - 3_类与对象 (C++语言程序设计【第三版】 郑莉等,清华大学出版社)
3--类与对象 在我们熟悉的现实世界中,一切事物都是 对象 .对象可以是有形的,也可以是无形的. 对象可以是一个个体,也可以是由诸多其他对象组成. C++支持这种抽象,将抽象后的数据和函数封装在一起, ...
最新文章
- 收藏|最优论文+代码查找神器,覆盖AI全领域(966个ML任务、8500+论文)
- Python组织文件 实践:将文件的不同版本备份为ZIP文件
- 牛客 - Prize(bitset优化暴力)
- hadoop--Yarn资源调度器的基础架构、工作机制 与 作业提交全过程
- ASP.NET验证码的实现
- 【Python】数据转换利器
- Linux 命令(55)—— netstat 命令
- linux的文件系统简单介绍
- Raki的读paper小记:Star-Transformer
- 解决库仑计初始化卡死问题
- 【Android】Gradle 下载地址修改
- java里oop思想_Java OOP 思想解析
- 最新win10安装版激活方法 一键激活win10
- java中的URLEncoder和URLDecoder类
- 分享一些网站有免费的pdf书籍
- airpods版本号_怎么看airpods版本号 苹果airpods查看固件版本教程详解
- 前端网页水印实现方法
- performance 优化
- Android版简历(四)
- Android判断网络状态是否断开