美文网首页
93.final 和open用法,以及open和abstract

93.final 和open用法,以及open和abstract

作者: 枫叶1234 | 来源:发表于2020-12-11 09:42 被阅读0次

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属性。

屏幕快照 2019-08-30 上午11.20.15.png

上述表格仅适用于基类,对于接口类来说,你基本用不上fianlopenabstract,因为接口类默认是open,且不能被声明为final,如果接口类的方法没有函数体,那么其为abstract,但是不需要你明确指出他是 abstract的。

截屏2020-12-08 下午3.16.15.png

abstract 与open的区别

abstract 修饰的方法,可以不用去实现,不用写大括号,修饰的属性,不可以初始化值


截屏2020-12-08 下午3.36.03.png

open 修饰的方法是需要 有大括号的,即使里边不实现,也需要大括号的

相关文章

网友评论

      本文标题:93.final 和open用法,以及open和abstract

      本文链接:https://www.haomeiwen.com/subject/ipunectx.html