Kotlin笔记-面向对象编程1-类与对象,继承,构造函数
3.1 面向对象编程
- 类与对象
类: 对事物的一种封装(人),通常是名词
字段: 类属性(姓名,年龄),通常是名词
函数: 类行为(吃饭,睡觉),通常是动词
class
Example:
class Person {
var name = ""
var age = 0
fun eat() {
println("$name is eating. He is $age years old.")
}
}
实例化
val p=Person()
fun main() {
val p=Person()
p.name="Jack"
p.age=19
p.eat()
}
- 继承
Example:
class Student : Person1() {
var sno = ""
var grade = 10
}
open
open class Person1 {
var name = ""
var age = 0
fun eat() = println("$name is eating. He is $age years old.")
}
- 构造函数
- 主构造函数
主构造函数:没有函数体
class Student1(val sno: String, val grade: Int) : Person1() {
}
val student = Student1("001", 100)
init
主构造函数逻辑实现
class Student1(val sno: String, val grade: Int) : Person1() {
init {
println("sno is $sno")
println("grade is $grade")
}
}
主类构造函数必须调用父类构造函数实现方案
open class Person2(val name: String, val age: Int) {
fun eat() = println("$name is eating. He is $age years old.")
}
class Student2(val sno: String, val grade: Int, name: String, age: Int) : Person2(name, age) {
init {
println("sno is $sno")
println("grade is $grade")
}
}
val student1=Student2("001",100,"Tom",21)
- 次构造函数
序号 | 一些特性 |
1 | 任何一个类只能有一个主构造函数,但是可以有多个次构造函数 |
2 | 次构造函数可以用来实例化一个类,并且它有函数体 |
3 | 当一个类既有主构造函数,又有次构造函数,所有次构造函数必须调用主构造函数(包括间接接口) |
constructor
Example:
class Student3(val sno: String, val grade: Int, name: String, age: Int) : Person2(name, age) {
constructor(name:String,age:Int):this("",0,name,age)
constructor():this("",0)
}
实例化
val student4=Student3()
val student5=Student3("Jack",19)
val student6=Student3("001",100,"Jack",19)
- 特殊情况
类中只有次构造函数,没有主构造函数
class Student4:Person2{
constructor(name: String,age: Int):super(name,age){
}
}
q(≧▽≦q):Kotlin新特性
- 参数默认值可以替代次构造函数的功能