Open
而在kotlin的世界里面则不是这样,在kotlin中它所有的类默认都是final的,那么就意味着不能被继承,而且在类中所有的方法也是默认是final的,那么就是kotlin的方法默认也不能被重写。那么想在kotlin中继承父类应该怎么做呢
为类增加open,class就可以被继承了
open class Person{
}
为方法增加open,那么方法就可以被重写了
open class Person{
open fun eat(food: String) {
}
}
open class Man:Person(){
override fun eat(food: String) {
super.eat(food)
}
}
final
//这个类具有
open
属性,可以被其他类继承
open class People: Speakable{
//open
的方法被实现和覆写,该方法也是open
的
override fun say() {}
//final
属性的方法,不可被覆写
fun sayHello() {}
//open
属性的方法,可以被继承和覆写
open fun sayName() {}
}
当然,你也可以阻止某些方法被覆写:
open class People: Speakable{
//final
修饰一个原本具有open
属性的方法,使其变得不可再被覆写
final override fun say() {}
}
在kotlin中,abstract
的用法几乎和Java一致,我就不再啰嗦,值得一提的是,当你使用abstract修饰符的时候,可以忽略open
修饰符,因为被abstract
修饰的类默认具有open
属性。
上述表格仅适用于基类,对于接口类来说,你基本用不上fianl
、open
、abstract
,因为接口类默认是open
,且不能被声明为final,如果接口类的方法没有函数体,那么其为abstract
,但是不需要你明确指出他是 abstract
的。
abstract 与open的区别
abstract 修饰的方法,可以不用去实现,不用写大括号,修饰的属性,不可以初始化值
截屏2020-12-08 下午3.36.03.png
open 修饰的方法是需要 有大括号的,即使里边不实现,也需要大括号的
网友评论