1、类的声明
2、类的构造函数
3、类的实例化
4、类的组成
一、类的声明
1、关键字:class
2,定义格式:class 类名{ }
class Test {
//属性
//构造函数
....
}
二、类的构造函数
1、在kotlin中,只允许一个主构造函数和多个二级构造函数,其中主构造函数是类头的一部分。
2、关键字:constructor(参数)
1、主构造函数 :
class Test constructor(name: String) {
...
}
因为默认修饰符(下一节写)是可见的(public)并且不存在任何的注释符(@...),故而主构造函数constructor关键字可以省略。
所有上面的代码等价于下面:
class Test (name: String) {
...
}
2、构造函数中的初始化代码块 :
关键字:init{ }
class Test constructor(var name: String) {
//其中constructor可以省略
init {
name = "kotlin"
}
}
3、辅助构造函数
kotlin支持二级构造函数,他们以constructor关键字作为前缀。
格式:
class Test{
constructor(参数列表){
}
}
如果类有主构造函数,每个次构造函数都要,或直接或间接通过另一个次构造函数代理主构造函数。在同一个类中代理另一个构造函数使用 this 关键字:
fun main(args: Array<String>) {
var student = Student("aaa")
var student2 = Student("aaa", 12)
}
class Student(name: String) {
init {
println(name)
}
constructor(name: String, age: Int) : this(name) {
println(name + age)
}
constructor(name: String,age: Int,sex:String) : this(name,age){
//this里面有两种选择,第一种是直接委托主函数,第二种是间接委托第一个构造函数委托主函数
}
}
结果图:
可以看出,当实例化类的时候只传1个参数的时候,只会执行init代码块中的代码。当传2个参数的时候,除了执行了init代码块中代码外,还执行了二级构造函数中的代码。
4、当类的主构造函数都存在默认值时的情况:
在 JVM 虚拟机中,如果主构造函数的所有参数都有默认值,编译器会生成一个附加的无参的构造函数,这个构造函数会直接使用默认值。
fun main(args: Array<String>) {
var student0 = Student()
var student1 = Student("aaa")
var student2 = Student("aaa", 12)
}
class Student(name: String="bbb") {
init {
println(name)
}
constructor(name: String, age: Int) : this(name) {
println(name + age)
}
constructor(name: String,age: Int,sex:String) : this(name,age){
//this里面有两种选择,第一种是直接委托主函数,第二种是间接委托第一个构造函数委托主函数
}
}
结果图:
三、类的实例化
调用类的构造函数,和java的区别就是,没有new关键字
var student0 = Student()
var student1 = Student("aaa")
四、类的组成
类的构成由构造函数和初始化代码块、属性(字段)、函数(方法)、内部类(嵌套类)、对象声明五部分组成
1、代码块
构造函数板块
2、属性(字段)
1、一个类中是可以存在属性的,一个属性可以用val或者var修饰。
用val修饰符修饰的属性是只读的,即不能被修改,只可使用。
用var修饰符修饰的属性是可读写的,即能用能改。
2、Getter()与Setter()
getter()对应Java中的get()函数,setter()对应Java中的set()函数。不过注意的是,不存在Getter()与Setter()的,这只是Kotlin中的叫法而已,真是的写法,还是用get()、set()。
class Student() {
var name: String? = "kotlin"
//当用var修饰时,必须为属性赋默认值
var age: Int = 0
get() = 10
set(value) {
field = value//field代表当前的属性
}
//用val修饰时,用getter()函数时,属性可以不赋默认值。但是不能有setter()函数。
val sex: String
get() = "女"
}
set(value){field = value} 这样的一句代码。其中value是Koltin写setter()函数时其参数的约定俗成的习惯。你也可以换成其他的值。而 field 是指属性本身。
3、函数(方法)
这个说过了咯函数的基本使用
4、内部类
1、抽象类
2、内部类
......(下一篇说类的分类)
5、对象声明
本篇已经讲过了~~~