1、open关键字
定义连个类Father、Son
Son继承Father
image.png
看下java代码
image.png
Father类是final的,所以不能继承,需要加上open关键字修饰,成员变量和成员方法都一样
fun main(args: Array<String>) {
var son=Son()
son.horbe()
}
open class Father{
open var name="张三"
open var age=20
open fun horbe()
{
println("父亲习惯抽烟")
}
}
class Son:Father(){
override var name="张小三"
override var age=10
override fun horbe() {
println("孩子喜欢看书")
}
}
输出:
image.png
2、抽象类
抽象类用abstract表示,抽象类可以没有抽象方法和抽象字段,抽象类不需要使用open关键字
fun main(args: Array<String>) {
var son=Son()
println(son.name)
println(son.age)
son.horbe()
}
abstract class Father{
abstract var name:String
var age=20
abstract fun horbe()
}
class Son:Father(){
override var name="张小三"
override fun horbe() {
println("孩子喜欢看书")
}
}
输出:
image.png
3、接口
fun main(args: Array<String>) {
var son=Son()
println(son.name)
println(son.age)
son.horbe()
son.ride()
son.drive()
}
abstract class Father{
abstract var name:String
var age=20
abstract fun horbe()
}
class Son:Father(),RideBike,DriveCar{
override fun ride() {
println("骑自行车")
}
override fun drive() {
println("开车")
}
override var name="张小三"
override fun horbe() {
println("孩子喜欢看书")
}
}
interface RideBike{
fun ride()
}
interface DriveCar{
fun drive()
}
输出:
image.png
4、接口细节
kotlin接口中的字段不能实现,只能定义,但在java中是可以的
image.png
kotlin接口中的方法是可以实现的,但是java中是不可以的
interface DriveCar{
fun drive(){
println("开车")
}
var str:String
}
5、is关键字
类似于java中instanceof关键字
fun main(args: Array<String>) {
val shepHerdDog:Dog = ShepHerdDog()
//判断完之后已将将shepHerdDog类型由Dog类型转换为ShepHerdDog类型
if(shepHerdDog is ShepHerdDog){
shepHerdDog.herdShep()
}
}
//Dog狗
abstract class Dog
//牧羊犬
class ShepHerdDog:Dog(){
//功能
fun herdShep(){
println("牧羊犬放羊")
}
}
//中华田园犬
class RuralDog:Dog(){
//功能
fun watchDoor(){
println("中华田园犬看家")
}
}
输出:
image.png