【Kotlin】类的继承 ① ( 使用 open 关键字开启类的继承 | 使用 open 关键字开启方法重写 )
创始人
2024-05-13 15:26:24

文章目录

  • 一、使用 open 关键字开启类的继承
  • 二、使用 open 关键字开启方法重写





一、使用 open 关键字开启类的继承



Kotlin 中的类 默认都是 封闭的 , 无法被继承 , 如果要想类被继承 , 需要在定义类时 使用 open 关键字 ;

定义一个普通的 Kotlin 类 :

class Person(val name: String, val age: Int) {fun info() {println("name : $name, age : $age")}fun sayHello(){println("Hello World")}
}

此时 , 如果声明一个类 , 继承 普通的 kotlin 类 , 在编译时会提示

This type is final, so it cannot be inherited from

报错信息 ;
在这里插入图片描述


如果使用 open 关键字 修饰 Person 类 , 则该类可以被继承 , 此时报错信息消失 ;

在这里插入图片描述

代码示例 :

open class Person(val name: String, val age: Int) {fun info() {println("name : $name, age : $age")}fun sayHello(){println("Hello World")}
}class Student : Person("Tom", 18){}fun main() {var student = Student()student.info()student.sayHello()
}

上述代码执行结果 :

name : Tom, age : 18
Hello World




二、使用 open 关键字开启方法重写



在 Kotlin 类的子类中 , 使用 override 关键字 重写方法 , 格式为 :

override fun 被重写的方法名(参数列表): 返回值类型 {// 方法体
}

注意 , 父类中 被重写方法 必须 使用 open 关键字修饰 , 才能开启方法重写 , 否则默认情况下方法是 final 类型的 ;


如果在父类中 , 被重写的函数是普通函数 , 没有使用 open 关键字修饰 , 重写该函数就会出现如下报错 :

'sayHello' in 'Person' is final and cannot be overridden

在这里插入图片描述
在 父类 Person 类中 , sayHello 函数是普通函数 , 默认情况下普通函数不能被重写 , 因此报上述错误 ;

在 父类中 , 使用 open 关键字 , 开启函数重写 , 在编译时就不会进行报错 ;

在这里插入图片描述

正确代码示例 :

open class Person(val name: String, val age: Int) {fun info() {println("name : $name, age : $age")}open fun sayHello(){println("Hello World")}
}class Student : Person("Tom", 18){override fun sayHello(){println("Hello World Tom")}
}fun main() {var student = Student()student.info()student.sayHello()
}

执行结果 :

name : Tom, age : 18
Hello World Tom

相关内容

热门资讯

猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...