文章目录
背景介绍
Kotlin 支持面向对象编程,提供了定义类、属性、方法等最基本的功能。Kotlin 也使用构造器来创建类的对象,也支持面向对象的三大特征:封装、继承和多态,提供了 private 、protected、internel 和 public 四个访问控制符来实现良好的封装;子类继承父类就可以继承父类的属性和方法,如果访问权限允许,子类对象可以直接调用父类中定义的方法。
这里可以吧函数和方法做一下区分:独立的叫做函数,在类中定义的函数叫做方法
1. 类和对象
类是面向对象的重要内容,类就是自定义的数据类型,可以使用类来定义变量,类定义的变量都是引用变量,所有的类都属于引用类型的数据。
类的作用:定义变量;创建对象;派生子类
1.1 定义类
定义类的语法如下:
[修饰符] class 类名 [constructor 主构造器] {
0 或多个次构造器定义...
0 或多个属性...
0 或多个方法...
}
Kotlin 的类定义由 类名、 类头(指定其泛型声明、主构造器等)和用花括号包裹起来的类体构成。
1.1.1 修饰符
Kotlin 中的修饰符有这些: public | internal | private (只能出现一个)、 final | open | abstract (也只能出现一个),修饰符可以忽略。
open 修饰符是 Kotlin 中引入的修饰符, open 是 final 是反义词,不能同时修饰一个类、方法或属性,表明类可以派生子类、方法或属性可被重写。
1.1.2 类中的成员
对弈一个类定义而言,可以包含三种最常见的成员:构造器、属性和方法,这三种成员都是可以 0 或多个的,如果都是 0 个就是一个空类,没有什么实际的意义,类中各个成员之间的定义顺序不会受影响,各成员之间可以相互调用。
1.1.2.1 构造器
构造器用于构造该类的对象,Kotlin 使用构造返回该类的对象(无须使用 new),属性用于定义该类的对象所包含的状态数据,方法则用于定义该类的对象的行为特征或者功能实现。
构造器是一个类创建对象的根本途径,如果一个类没有构造器,那么它通常无法创建对象,Kotlin 中的类可以有 0或 1个主构造器和 0 或 多个次构造器。主构造器是类头的一部分它跟在类名(和泛型声明)之后,如下所示:
class Book constructor(bookName: String) {
}
上面的代码中 “constructor(bookName: String)” 这就是主构造器(主构造器属于类头部分),可见,主构造器它是在类头中使用 constructor 关键字定义的一个无执行体的构造器,虽然主构造器不能定义执行体,但是可以定义多个行参,这些行参可以在属性声明、初始化块中使用。如果主构造器没有任何注解或者修饰符,可以省略 constructor 关键字,也就是说上面的代码就可以简写成如下方式:
class Book(bookName: String) {
}
和Java 类似,Kotlin 中如果没有为非抽象类定义任何(主或次)构造器,系统会自动提供一个无参的主构造器,该构造器默认使用 public 修饰,一旦提供了构造器,系统将不再为该类提供构造器。构造器既不能定义返回值类型,也不能使用 Unit 声明构造器没有返回值。
定义构造器的语法格式如下:
[修饰符] constructor (形参列表) {
//构造器执行体
}
构造器的语法格式说明:
- 修饰符: 可以省略,也可以是 public | protected | internal | private 其中之一;
- 形参列表: 格式和函数的形参列表一样
1.1.2.2 属性
定义属性的语法格式如下:
[修饰符] var | val 属性名: 类型 [= 默认值]
[<getter>]
[<setter>]
- 修饰符: 修饰符可以是:public | protected | internal | private、 final | open | abstruct | ;两类修饰符只能出现每种的其一,如果修饰符使用 public、protected、或者internal 和 修饰符省略的效果是一样的。
- var | val : 使用 var 可读写, val 只读不可写
- 属性名:首个单词的首字母小写,其他单词首字母大写其他字母小写
- getter、setter : 只读性的变量不可以定义 setter 方法
1.1.2.2 方法
如果函数定义在类中,此时就叫做方法,顶层函数的语法与类中方法的语法主要区别在于修饰符: 顶层函数不能使用 protected、 abstract 和 final 修饰符, 但是类中的方法可以使用: public | protected | internal | private、 final | abstract | open 这些修饰符 。
1.2 Kotlin 的对象
1.2.1 创建对象
创建对象的根本途径是类构造器,调用某个类的构造器可以创建类的对象,不需要使用 new 关键字, 如下所示:
//使用 Book 类创建一个 Book 类型的变量
var b: Book
// 给 b 变量 赋值,也就是对象的实例化,只需要通过 Book 的构造器就可以返回一个 实例对象了
b = Book()
上述代码可以写成如下方式:
var b: Book = Book()
创建好对象,便可以使用该对象了,可以访问对象的属性,调用对象的方法。使用方式跟 Java 是一样的,对象.属性 、对象.方法名(参数列表)。
1.2.2 对象的 this 关键字
和 Java 相似,Kotlin 也提供了 this 关键字,this 关键字总是指向调用该方法的对象。根据 this 出现位置的不同,this 作为对象的默认引用有两种情形:
- 在构造器中引用该构造器正在初始化的对象;
- 在方法中调用该方法的对象
this 关键字最大的作用就是让类中的某个方法访问该类中的另一个方法或属性。