Kotlin快速入门5

Kotlin的继承与重写

kotlin的继承

Kotlin中所有类都继承自Any类,Any类是所有类的超类,对于没有超类型声明的类是默认超类(Any 不是 java.lang.Object):

class LearnKotlin  // 默认继承自Any

Any类默认提供三个函数

equals()hashCode()toString()

在kotlin中,除抽象类外的一个类可被继承要在class前添加open关键字进行修饰:

open class BaseClass(p: Int)           // 定义基类class ExtendsClass(p: Int) : BaseClass(p)

构造函数

1、子类有主构造函数

如果子类有主构造函数,则基类必须在主构造函数中立即初始化。示例如下:

open class Person(name : String, age : Int){}class Student(name : String, age : Int, var grade : String, var score : Int) : Person(name, age) {}

2、子类无主构造函数

如果子类无主构造函数,则必须在每一个次构造函数中用 super 关键字初始化基类,或者在代理另一个构造函数。初始化基类时,可以调用基类的不同构造方法。

class Student : Person {constructor(ctx: Context) : super(ctx) {}constructor(ctx: Context, attrs: AttributeSet) : super(ctx,attrs) {}
}

验证实例如下,先构造一个只有次构造函数的基类:

open class Person(name:String){/**次级构造函数**/constructor(name:String,age:Int):this(name){//初始化println("-------基类次级构造函数---------")}
}

再构造一个继承基类的子类,同时修改子类的次构造函数:

class Student:Person {constructor(name:String,age:Int,grade:String,score:Int):super(name, age){println("姓名: ${name}")println("年龄: ${age}")println("年纪: ${grade}")println("分数: ${score}")}
}

实例化Student对象,即刻看到打印信息:

fun main(args: Array<String>) {var student =  Student("Jack", 18, "13", 89)
}

控制台打印信息如下:

重写

在基类里,使用fun声明函数时,默认此函数有final修饰,不能被子类重写。如果想要这个方法可以被重写覆盖,就需要用open字段修饰这方法,同时在重写的方法前必须使用override修饰。如果没有使用open修饰,则子类不允许命名相同名字的函数。

class NetConfig : Base() {override fun draw() {   // 前面声明overridesuper.draw()}}open class Base {open fun draw() {}  //前面声明open
}

属性覆盖

和重写方法一样,需要重写的属性要用到open这个关键字,同时重写的属性需要用override来修饰。如果没有open来修饰属性,则子类不允许命名相同名字的属性:

open class Person{open val num : Int = 0
}
class Student: Person() {override var num = 10
}

这里要注意的是,你重写覆盖属性时,可以用一个var属性覆盖val属性,但反过来则不行。(一个val属性本质上是声明了一个get方法,而将其覆盖为 var 只是在子类中额外声明一个 set 方法,反之不行)。

当然,也可以直接在构造函数里覆盖属性:

open class Person{open val num : Int = 0
}
class Student(override var num: Int = 0): Person() {
}

覆盖规则

在kotlin中,如果基类有多个相同的方法(继承或者实现自其他类,如A、B类),则必须要重写该方法,使用super范型去选择性地调用基类的实现:

open class A {open fun f () { println("A") }fun a() { println("a") }
}interface B {fun f() { println("B") } //接口的成员变量默认是 open 的fun b() { println("b") }
}class C() : A() , B{override fun f() {super<A>.f()//调用 A.f()super<B>.f()//调用 B.f()}
}fun main(args: Array<String>) {val c =  C()c.f()
}

对应命令控制台输出如下:

由程序中可见,C 继承自 A 或 B, C 不仅可以从 A 或者 B 中继承函数,而且 C 可以继承 A()、B() 中共有的函数。

End,如有问题请留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/247213.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 13.0 SystemUI下拉状态栏定制二 锁屏页面横竖屏时钟都居中功能实现二

1.前言 在13.0的系统rom定制化开发中,在关于systemui的锁屏页面功能定制中,由于在平板横屏锁屏功能中,时钟显示的很大,并且是在左旁边居中显示的, 由于需要和竖屏显示一样,所以就需要用到小时钟显示,然后同样需要居中,所以就来分析下相关的源码,来实现具体的功能 如图…

elementplus Dialog 对话框设置距离页面顶部的距离

默认为 15vh&#xff0c;当弹窗过于高的时候&#xff0c;这个距离其实是不合适的 <el-dialogv-model"dialogVisible"title"Tips"width"30%":before-close"handleClose"top"6vh"><span>This is a message</s…

KMP板子 前缀跳后缀

目录 原理&#xff1a; 板子&#xff1a; 原理&#xff1a; 出现重复【 存在部分前缀等于后缀 &#xff08;自己的前面一部分跟后面一部分一样的&#xff09; 】的时候&#xff0c;可以跳&#xff01; 来源&#xff1a;KMP算法中next数组的理解 - 知乎 (zhihu.com) &#xf…

JVM 笔记

JVM HotSpot Java二进制字节码的运行环境 好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;具有垃圾回收功能数组下标越界检查多态&#xff08;虚方法表&#xff09; JVM组成 类加载子系统&#xff08;Java代码转换为字节码&#xff09;运行时数据…

Qt6入门教程 12:QAbstractButton

目录 一.状态 二.信号 三.使用 1.自定义按钮 2.多选 3.互斥 QAbstractButton类实现了一个抽象按钮&#xff0c;并且让它的子类来指定如何处理用户的动作&#xff0c;并指定如何绘制按钮。QAbstractButton类是所有按钮控件的基类。 QAbstractButton提供…

Python笔记14-实战小游戏飞机大战(上)

文章目录 功能规划安装pygame绘制游戏窗口添加玩家飞机图像屏幕上绘制飞船代码重构驾驶飞船全屏模式射击 本示例源码地址 点击下载 功能规划 玩家控制一艘最初出现在屏幕底部中央的飞船。玩家可以使用箭头键左右移动飞船&#xff0c;还可使用空格键射击。游戏开始时&#xff…

1948-2022年金融许可信息明细数据

1948-2022年金融许可信息明细数据 1、时间&#xff1a;1948-2022年 2、来源&#xff1a;银监会&#xff08;银监会许可证发布系统&#xff09; 3、指标&#xff1a;来源表、机构编码、机构名称、所属银行、机构类型、业务范围、机构住所、地理坐标、行政区划代码、所属区县、…

Leetcode—2942. 查找包含给定字符的单词【简单】

2023每日刷题&#xff08;一零一&#xff09; Leetcode—2942. 查找包含给定字符的单词 实现代码 class Solution { public:vector<int> findWordsContaining(vector<string>& words, char x) {vector<int> ans;for(int i 0; i < words.size(); i)…

【Linux】动态库和静态库——动态库和静态库的打包和使用、gcc编译、拷贝到系统默认的路径、建立软连接

文章目录 动态库和静态库1.静态库和动态库的介绍2.静态库的打包和使用2.1生成静态库2.2使用静态库的三种方式2.2.1gcc编译2.2.2拷贝到系统默认的路径2.2.3建立软连接 3.动态库的打包和使用3.1生成动态库3.2使用动态库3.3解决加载不到动态库的方法 动态库和静态库 1.静态库和动…

linux 下scrcpy 手机投屏到电脑,QT+ffmpeg 获取视频流,处理等等

linux 下scrcpy 手机投屏到电脑,QT+ffmpeg 获取视频流,处理 1 安装 scrcpy 地址 https://github.com/Genymobile/scrcpy 转到 relese 下载 我这里下载的是linux系统 v2.3.1 版本 scrcpy-2.3.1.tar.gz 下载 scrcpy-server v2.3.1 版本 scrcpy-server-v2.3.1 解压scrcpy-2.3…

林浩然的奇幻编程之旅:幽默探索图灵的智慧宇宙

林浩然的奇幻编程之旅&#xff1a;幽默探索图灵的智慧宇宙 Lin Haoran’s Fantastical Coding Journey: Humorous Exploration of Turing’s Intelligent Universe 林浩然&#xff0c;一个对计算机科学怀揣着无尽好奇的探索者&#xff0c;像一只闯入魔法森林的小狐狸&#xff0…

网安培训第二期——sql注入+中间件+工具

文章目录 宽字节注入插入注入二次注入PDO模式(动态靶机&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;)sql注入读取文件sql注入导出文件linux命令 10.12笔记sqlmapsqlmap参数 10.13笔记sqlmap 文件读写前后缀常用tamper及适用场景 10.…

Excel·VBA时间范围筛选及批量删除整行

看到一个帖子《excel吧-筛选开始时间&#xff0c;结束时间范围内的所有记录》&#xff0c;根据条件表中的开始时间和结束时间构成的时间范围&#xff0c;对数据表中的开始时间和结束时间范围内的数据进行筛选 目录 批量删除整行&#xff0c;整体删除批量删除整行&#xff0c;分…

多维时序 | Matlab实现DBO-LSTM蜣螂算法优化长短期记忆神经网络多变量时间序列预测

多维时序 | Matlab实现DBO-LSTM蜣螂算法优化长短期记忆神经网络多变量时间序列预测 目录 多维时序 | Matlab实现DBO-LSTM蜣螂算法优化长短期记忆神经网络多变量时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现DBO-LSTM多变量时间序列预测&#x…

关机恶搞小程序

1. system("shutdown")的介绍 当system函数的参数是"shutdown"时&#xff0c;它将会执行系统的关机命令。 具体来说&#xff0c;system("shutdown")的功能是向操作系统发送一个关机信号&#xff0c;请求关闭计算机。这将触发操作系统执行一系列…

vscode的扩展商店使用时报错 XHR failed

文章目录 前言解决扩展商店的使用github的相关问题 前言 这几天使用vscode扩展商店安装插件时发现一搜索就报错&#xff0c;网上搜了一些解决方法&#xff0c;看起来不大靠谱。而且用了好几年了vscode都没出现过这个问题&#xff0c;感觉是网络问题。 解决扩展商店的使用 首先…

用 CanvasKit 实现超级丝滑的原神地图(已开源)!!!

首先给大家送上预览地址&#xff1a; 官网地址&#xff1a;https://webstatic.mihoyo.com/ys/app/interactive-map/index.html canvaskit地址&#xff1a;http://106.55.55.247/ky-genshin-map/ 为什么 canvaskit 有如此高的性能&#xff1f; 第一个问题&#xff0c;官方网页…

JVM性能分析工具——Arthas及火焰图的使用

Arthas的使用 Arthas常用命令Arthas的安装Linux压测工具Apache Bench安装火焰图的使用火焰图如何分析火焰图的互动 Arthas常用命令 help &#xff1a;查看所有命令dashboard &#xff1a;仪表板&#xff0c;查看线程的CPU信息等heapdump &#xff1a;不同类对象占用内存比重&a…

python算法与数据结构---滑动窗口双指针

学习目标 了解滑动窗口的基本原理&#xff1b;学会用使用python语言解答滑动窗口经典题目&#xff1b;了解双指针的基本原理&#xff1b;学会使用python语言解答双指针经典题目&#xff1b; 滑动窗口 209. 长度最小的子数组 https://leetcode.cn/problems/minimum-size-sub…

初识人工智能,一文读懂机器学习之逻辑回归知识文集(6)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…