Kotlin开发安卓APP笔记-类和对象(1)
来源:互联网 发布:虚拟机网络信息不可用 编辑:程序博客网 时间:2024/06/07 00:16
其实这一篇应该是先于函数学习的,现在补上
跟Java一样,Kotlin里面类的声明使用的是关键字class,类的声明包含有三部分:类名,类头,类体,其中,类头和类体是可选的。
class Demo
类成员
1、构造器和初始化块
2、成员函数
3、属性
4、内部类
5、对象声明
构造器Constructors
一个类可以有一个主构造器或者多个次构造器
主构造函数(primary constructor)
主构造器中不能包含任何代码,初始化代码可以放在初始化代码段中,初始化代码段使用 init 关键字作为前缀。
class Demo constructor(firstName: String){ init { //类在被构造的时候执行 }}
如果主构造器没有任何注解或者指示符,constructor关键字可以被省略。
class Demo(firstName: String){}
相反,如果主构造器有注解或者可见的指示符,constructor是必须的。
class Demo public @Inject constructor(firstName: String) { ... }
次构造函数
次构造函数也可以叫做二级构造函数,使用时需要加前缀 constructor:
class Demo constructor(firstName: String){ constructor(firstName:String,lastName:String):this(firstName){ } init { }}
需要说明的是,如果主构造函数和次构造函数同时存在,每个主构造函数需要委托到次构造函数中去,或者间接通过另一个次构造函数来委托。使用方法就是使用this,表示委托到本类的另一个构造函数中。
如果非抽象的类没有声明任何的构造函数,它默认继承一个没有任何参数的公有构造器,这个跟Java中的默认构造器类似。如果希望它继承的是一个私有的构造器,就需要显示的指明。
class Demo private constructor () {}
创建类实例
与Java不同的是kotlin创建实例不需要new关键字
val demo=Demo()val demo=Demo("Alan")val demo=Demo("Alan","Walker")
类的属性
类的属性可以用关键字 var和val 声明,var声明为可变的, val声明为不可变。
class Demo { var name: String = "醉猫" var age:Int=21 var selfIntroduction="16岁的96年新人程序员,大家多多关照"}
要使用一个属性,可以像Java一样直接引用就行了
val demo=Demo()demo.namedemo.ageDemo().selfIntroduction
getter 和 setter
属性声明的完整语法:
var <propertyName>[: <PropertyType>] [= <property_initializer>] [<getter>] [<setter>]
getter 和 setter 都是可选
如果属性类型可以从初始化语句或者类的成员函数中推断出来,那就可以省去类型,val不允许设置setter函数,因为它是只读的。
var allByDefault: Int? // 错误: 需要一个初始化语句, 默认实现了 getter 和 setter 方法var initialized = 1 // 类型为 Int, 默认实现了 getter 和 setterval simple: Int? // 类型为 Int ,默认实现 getter ,但必须在构造函数中初始化val inferredType = 1 // 类型为 Int 类型,默认实现 getter
实例
以下实例定义了一个 Person 类,包含两个可变变量 lastName 和 no,lastName 修改了 getter 方法,no 修改了 setter 方法。
class Person { var lastName: String = "zhang" get() = field.toUpperCase() // 将变量赋值后转换为大写 set var no: Int = 100 get() = field // 后端变量 set(value) { if (value < 10) { // 如果传入的值小于 10 返回该值 field = value } else { field = -1 // 如果传入的值大于等于 10 返回 -1 } } var heiht: Float = 145.4f private set}// 测试fun main(args: Array<String>) { var person: Person = Person() person.lastName = "wang" println("lastName:${person.lastName}") person.no = 9 println("no:${person.no}") person.no = 20 println("no:${person.no}")}
输出结果为:
lastName:WANGno:9no:-1
Kotlin 中类不能有字段。提供了 Backing Fields(后端变量) 机制,备用字段使用field关键字声明,field 关键词只能用于属性的访问器,如以上实例:
var no: Int = 100 get() = field // 后端变量 set(value) { if (value < 10) { // 如果传入的值小于 10 返回该值 field = value } else { field = -1 // 如果传入的值大于等于 10 返回 -1 } }
非空属性必须在定义的时候初始化,kotlin提供了一种可以延迟初始化的方案,使用 lateinit 关键字描述属性:
class LazyProperty(val initializer: () -> Int) { var value: Int? = null val lazy: Int get() { if (value == null) { value = initializer() } return value!! }}
抽象类
和Java一样,kotlin也有抽象类,也用关键字abstract修饰
抽象是面向对象编程的特征之一,类本身,或类中的部分成员,都可以声明为abstract的。抽象成员在类中不存在具体的实现。
注意:无需对抽象类或抽象成员标注open注解。
open class Base { open fun f() {}}abstract class Derived : Base() { override abstract fun f()}
- Kotlin开发安卓APP笔记-类和对象(1)
- Kotlin开发安卓APP笔记-类和对象(2)
- Kotlin开发安卓APP笔记-数据类型
- Kotlin开发安卓APP笔记-接口
- Kotlin开发安卓APP笔记-函数和lambda表达式(1)
- Kotlin开发安卓APP笔记-协程(代替线程)
- Kotlin开发安卓APP笔记-条件语句和循环语句
- Kotlin开发安卓APP笔记-函数和lambda表达式(2)
- 《转》Kotlin开发安卓APP笔记-函数和lambda表达式(3)
- Kotlin开发安卓APP笔记-创建工程及基础语法
- Kotlin开发安卓APP笔记实战-写个简易记事本(需求分析)
- Kotlin 安卓开发
- kotlin开发安卓
- 安卓开发之Kotlin
- 安卓APP开发学习笔记(1)
- Kotlin学习笔记(1)-类,接口,对象
- Kotlin 类和对象
- Kotlin 类和对象
- Golang中的信号处理
- Leetcode算法学习日志-257 Binary Tree Paths
- document.write用法与清空原来的内容原因
- 购物车Bean
- EventBus使用详解(一)——初步使用EventBus
- Kotlin开发安卓APP笔记-类和对象(1)
- java中的函数参数传递·
- H5游戏的特性玩法
- 二级购物车 提供源码
- if __name__ == '__main__' 如何正确理解?
- spring集成shiro实现登录认证自定义验证功能(认证采用国密SM4算法)
- vim tab 设置为空格
- Java 向下取整并保留两位小数
- 基本数据类型和引用数据类型当做参数传递