面向对象编程
类与对象
定义一个Person类并将其实例化。
class Person {
var name = ""
var age = 0
fun eat(){
println(name + " is eating. He is " + age + " years old.")
}
}
fun main(){
val p = Person()//kotlin实例化对象省去了关键词new
p.name = "Tom"
p.age = 18
p.eat()
}
继承与构造函数
首先有一点要清楚,kotlin中要想父类可以继承,要在前面加上关键字open,这一点和Java不同。
第二点,继承的关键字是 : ,写法如下:
class Student:Person(){
var sno = ""
var grade = 0
}
因为Java和kotlin在继承中都规定子类的构造函数都必须调用父类的构造函数,所以kotlin在继承时通过父类的括号来指定调用哪一个构造函数。(Person的括号为空说明现在调用的是无参构造函数)
kotlin将构造函数分为主构造函数和次构造函数,主构造函数和Java中的一样,函数名和类名相同;次构造函数则需要用关键字constructor实现。次构造函数必须调用主构造函数(包括间接调用)。
接口
第一,若实现接口的同时还有其他父类要继承,则统一使用冒号,中间使用都好分开,而且接口的后面不用加括号:
interface Study {
fun readBook()
fun doHomework()
}
class Student:Person(),Study{
var sno = ""
var grade = 0
override fun readBook() {
println(name +" is reading.")
}
override fun doHomework() {
println(name + " is doing homework")
}
}
fun main(){
val student = Student()
student.name = "Tom"
student.age = 18
doStudy(student)
}
fun doStudy(study: Study){
study.readBook()
study.doHomework()
}
第二,kotlin还允许对接口中定义的函数默认实现:
interface Study {
fun readBook()
fun doHomework(){
println("do homework default implementation")
}
}
函数修饰符
Java中对函数有四种修饰符,分别是:public、private、protected和default。
kotlin中也有四种修饰符,分别是:public、private、protected和default。
区别:
修饰符 | Java | Kotlin |
---|---|---|
public | 所有类可见 | 所有类可见(默认) |
private | 当前类可见 | 当前类可见 |
protected | 当前类、子类、同一包路径下的类可见 | 当前类、子类可见 |
default | 同一包路径下的类可见(默认) | 无 |
internal | 无 | 同一模块中的类可见 |