Kotlin中类的声明使用class关键字, 在class后面跟类名即可例如:
class Empty
class Stu {
fun getName() : String {
return "default"
}
}
class stud {
fun getAge() : Int {
return 0
}
}
上面这段代码共创建了三个类, 第一个是一个空类, 第二个和第三个是正常的类, 可以看到类名首字母大写或小写都可以, 但是还是大写比较合适.
kotlin中类的构造函数和java中略有不同, kotlin中构造函数分为主构造函数和次构造函数, 主构造函数是卸载类名后面, 例如:
class Student2 constructor(name : String) {
init {
println("name is : $name")
}
}
Student2类的主构造函数只有一个String类型的name参数, 2~4行为主构造函数的代码块
fun main(args: Array<String>) {
val stu = Student2("小明")
}
执行这段代码就会打印"name is 小明"也就是会执行init的代码块中的代码, 因此可以在init里对属性做初始化例如:
class Student2 constructor(name : String, age : Int) {
var nameStr : String = "default"
var ageInt = 0
init {
nameStr = name
ageInt = age
println("name is : $name")
}
}
甚至可以直接给类的成员变量赋值例如:
class Student2 constructor(name : String, age : Int) {
var nameStr = name
var ageInt = age
init {
println("name is : $nameStr , age is $ageInt")
}
}
更简单的写法, 可以直接把类的成员变量声明在构造函数中例如:
class Student2 constructor(val name : String, val age : Int) {
init {
println("name is : $name , age is $age") // name is : 小明 , age is 10
}
}
fun main(args: Array<String>) {
val stu = Student2("小明", 10)
println(stu.name + " " + stu.age) // 小明 10
}
一种简单的写法, 可以主构造器可以省略constructor关键字:
class Student2 (val name : String, val age : Int) {
init {
println("name is : $name , age is $age")
}
}
注意: 果构造器有注解,或者有可见度修饰符,这时constructor关键字是必须的,注解和修饰符要放在它之前, 例如如下这种写法:
class Student2 private (val name : String, val age : Int) {
init {
println("name is : $name , age is $age")
}
constructor(name : String) : this(name, 20)
}
这种写法会提示如下错误:
Error:(22, 16) Kotlin: Use 'constructor' keyword after modifiers of primary constructor
我们做这样的修改就可以了:
class Student2 private (val name : String, val age : Int) {
init {
println("name is : $name , age is $age")
}
constructor(name : String) : this(name, 20)
}
fun main(args: Array<String>) {
val stu = Student2("小明")
println(stu.name + " " + stu.age)
}
例子中我们的主构造器定义成了private类型, 但在类内部定义了一个从构造器(第5行), 利用this关键字 调用了双参数的主构造器, 并给类的成员变量name和age进行了赋值