当前位置: 首页 > news >正文

【Kotlin】类的继承 ① ( 使用 open 关键字开启类的继承 | 使用 open 关键字开启方法重写 )

文章目录

  • 一、使用 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

相关文章:

  • 做ug图纸的网站/seo站长助手
  • 东营企业自助建站/seo推广计划
  • 百度做一个网站怎么做呢/百度图片识别搜索引擎
  • 做网站加推广/网络营销活动策划方案
  • 网络推广工作描述/seo技术培训广东
  • 别人做的网站不能用了/百度投诉电话人工服务总部
  • Webpack5 教程(3)--处理图片资源
  • NUMA介绍
  • python与excel
  • 评估-----评估算法的指标
  • 详解pandas的read_excel函数
  • Python采集*瓣电影影评并实现可视化分析
  • EasyExcel的导入导出使用
  • C++设计模式(4)——策略模式
  • 十四.文件操作
  • 在 VMware Workstation 16 Pro 中安装 Ubuntu Server 22.04.1 并配置静态 IP 地址
  • 使用 Burpsuite 测试的常用操作(一)
  • 分分钟你也能写一个自己需要的 Chrome 扩展程序