Kotlin学习历程——抽象类与接口

Kotlin基础——类、对象和接口 kotlin中同样使用interface关键字来定义接口,接口的含义和Java中类似,用于定义抽象使用interface关键字定义接口。实现一个接口跟Java中不同,Kotlin中继承类和实现接口都是使用冒号。重写接口中的方法,使用override关键字,与Java中不同的是,override是必须写的,如果不写则会报错。这会避免先写出实现方法再添加抽象方法造成的意外重写。和Java一样,Kotlin中的类只能继承一个类,但可以实现多个方法。 阅读详情

Kotlin语言中文站

抽象类

类以及其中的某些成员可以声明为abstract表示是抽象类。

/** 父类 */
open class Machine {
    open fun name(){}
}

/** 抽象类 */
abstract class Mobilephone : Machine(){
    //强制子类实现
    abstract override fun name();
}

注意:抽象类是不可实例化的,必须由子类实现,因此抽象类不需要用open修饰。


接口

Kotlin接口可以即包含抽象方法的声明也包含实现。与抽象类不同的是,接口无法保存状态。它可以有属性但必须声明为抽象或提供访问器实现。

使用关键字interface来定义一个接口:

interface A {
    //有函数体的函数
    fun foo() {
        println("A##foo")
    }

    //待实现的函数
    fun bar()
}

实现接口

一个类可以实现一个或者多个接口。

class C : A {
    
    //实现接口A的方法
    override fun bar() {
        print("C##bar")
    }
}

接口中的属性

你可以在接口中定义属性。在接口中声明的属性要么是抽象的,要么提供访问器的实现。在接口中声明的属性不能有幕后字段(backing field),因此接口中声明的访问器不能引用它们,否则会提示错误。

interface Named {
    //抽象属性
    val name: String

    //提供访问器的实现
    val simpleName: String
        get() = ""

    fun foo() {
        print(name)
    }
}

使用幕后字段报错,如下图:

接口继承

一个接口可以从其他接口派生,从而既提供基类成员的实现也声明新的函数和属性。很自然的,实现这样接口的类只需定义所缺少的实现:

interface Person : Named {
    val firstName : String
    val lastName : String

    override val name: String
        get() = "$firstName _ $lastName"
    
    fun log() {
        print(name)
    }
}

//数据类Employee
data class Employee(
        //只实现需要实现的,不必实现name
        override val firstName: String,
        override val lastName: String,
        val pos: Int)
    : Person {
}

解决覆盖冲突

实现多个接口时,可能会遇到同一方法继承多个实现的问题。

//接口A
interface A {
    fun foo() {
        println("A##foo")
    }
    fun bar()
 
    fun a(){}
}

//接口B
interface B {
    fun foo() {
        println("B##foo")
    }

    fun bar() {
        println("B##bar")
    }
    
    fun b(){}
}

//接口D
class D : A, B {
    override fun foo() {
        //选择实现
        super<A>.foo()
        super<B>.foo()
        
        
        //也可以自己处理逻辑,不调用父类
    }

    override fun bar() {
        //因为A的bar未实现,所以这里调用super只能调用B,所以没有声明泛型
        super.bar()
        
        
        //也可以自己处理逻辑,不调用父类
    }
}

如上我们从 A 和 B 派生 D,我们需要实现我们从多个接口继承的所有方法,实现的方法具体执行什么代码逻辑可由我们自己决定。

这里我总结一下:

  • 接口中抽象的方法是一定需要实现的,如上面的bar()。
  • 如果继承的多个接口拥有相同的方法,如上面foo(),是一定需要实现的。
  • 其他父类的方法如a() 或者 b()可由我们自己决定是否需要实现。

上一篇:Kotlin学习历程——继承
下一篇:Kotlin学习历程——扩展

分享下学习Kotlin的历程-构造函数/抽象类/枚举 转载请注明出处:王亟亟的大牛之路开篇之前还是老规矩,先安利https://github.com/ddwhan0123/Useful-Open-Source-Android 还是尽量每天做更新和维护Kotlin和Java一样支持多构造函数的姿势,并且对属性对get/set方法进行了二次封装这一篇,也通过简单的demo来讲一下相关知识构造函数在说Kotlin构造函数之前先提一提Java的构造函数和实例方 阅读详情

相关推荐

浅谈Kotlin解析之设计模式

一、前言 设计模式是我们Android成长之路必备的一项技能,相信很多同学都已经Get了,现在让我们来看看在Kotlin中设计模式是如何表达的呢。 二、单例模式 单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例 。 使用场景: 确保某个类有且只有一个对象的场景,避免产生多个对象消耗过多的资源 Java单例模式回顾 懒汉式...

Android_SE的博客 469

kotlin-接口

与类的伴生对象类似,接口的伴生对象是该接口的单例实例。在 Kotlin 中,接口(Interface)是定义了一组抽象方法(没有实现体)的类型,这些方法可以被其他类实现。要实现继承了其他接口的接口,可以实现其所有的父接口定义的方法,并在实现类中提供所有继承的属性。在 Kotlin 1.4 及以后的版本中,接口中可以定义默认实现的方法。要实现接口中的默认方法,可以选择覆盖该方法,也可以直接继承该默认实现。要实现接口中的属性,可以在实现类中提供一个属性实现。注意,在实现接口中的方法时,需要使用。

qq_55888300的博客 3763

C++继承与多态 - 继承多态原理01

C++继承多态原理讲解

大秦坑王的专栏 2979

Kotlin接口

本篇博客主要介绍了接口内的成员、接口的定义与实现、接口的继承、以及接口实现时的覆盖冲突问题,最后介绍了函数式接口的SAM转换以及类型别名的使用

尘心平的博客 1666

Sciter教程_00_创建HelloWorld工程

本教程记录Sciter工程的创建和编译运行的过程。

qq_36707072的博客 2277

Eplan2022 复制已有的宏文件生成新的原理图宏文件

Eplan2022 新建原理图宏文件

haier123888的博客 1万+

kotlin的接口详解

在 Kotlin 中,接口(Interface)是一种定义了一组方法的抽象类型。与类不同,接口不能包含状态或字段。接口中的方法可以有默认实现,也可以是抽象的需要在实现类中提供具体实现的方法。

liulanba的博客 1961

DETR系列文章之–Co-DETR

Co-DETR,并行训练多个辅助头,以一对多的标签分配方式进行监督从辅助头中提取正样本坐标,为解码器中的正样本的训练效率进行额外的定制化正样本query.一对一标签分配:每个GT框分配给一个特定的query(DETR),较少的正query导致低效训练,从编码器生成的潜在表示和解码器中的注意力学习分析这一问题。一对多标签分配:每个GT框分配给检测器输出的多个proposal/anchor,依赖NMS或者anchor生成(ATSS,RetinaNet,FCOS,PAA)。

weixin_43731232的博客 2112

Kotlin基础(五):类和接口

本文主要讲解类和接口,主要包括类的声明、构造器、类成员、修饰符、类的继承、接口、抽象类。

分享计算机基础,android,C/C++,音视频等内容 2248

电子电气架构 --- 整车电源管理

保证启动能力:防止因电池电量耗尽而导致的车辆无法启动,这对于确保车辆在任何时候都能可靠运行至关重要。 延长电池寿命:通过避免电池深度放电,有助于延长其使用寿命,减少更换电池的需求和成本。 提升用户体验:虽然负载被关闭可能会暂时影响舒适度,但通过在必要时自动采取行动,可以减少驾驶员的焦虑和不确定性,提高整体的用户满意度。

Soly_kun的博客 1084

ESP32 WIFI 智能巡线小车设计与实现(四足 / 四轮通用)

本文设计的 ESP32 WIFI 智能巡线小车,硬件模块化、软件轻量化,兼容四足与四轮两种结构,实现了自动巡线与 WIFI 远程控制双功能。系统成本低、易上手,适合嵌入式初学者学习 WIFI 通信、传感器应用、运动控制等核心知识点,也可在此基础上扩展蓝牙控制、避障、视觉识别等功能。

weixin_42300449的博客 152

Kotlin学习基础知识大全(上)

Kotlin是由JetBrains公司开发的一种静态类型编程语言,最初发布于2011年。JetBrains是知名IDE工具IntelliJ IDEA的开发商,他们开发Kotlin的目的是为了解决Java语言在开发效率、代码简洁性和安全性方面的一些不足。2016年2月,Kotlin 1.0正式发布,标志着语言进入稳定阶段。2017年5月,在Google I/O大会上,Google宣布Kotlin成为Android开发的官方支持语言,这一决定极大地推动了Kotlin的普及。Kotlin中使用fun。

百锦再的博客 1万+

C#与数据采集卡集成开发全指南:从硬件连接到实时数据处理(附工业传感器监测实战)

C#数据采集卡集成开发指南 本文系统介绍了不同类型数据采集卡(DAQ卡)与C#的集成方法。主要内容包括: 数据采集卡分类:按接口分为PCIe/PCI(高带宽低延迟)、USB(便携即插即用)和以太网(远距离组网);按信号类型分为模拟量输入、数字量输入/输出等。 C#集成核心方法: 优先使用厂商SDK(如NI DAQmx),提供完整功能封装 无SDK时采用通用协议(如USB HID、Modbus TCP) 具体实现示例: NI DAQmx采集热电偶温度代码 USB HID协议读取模拟量电压值 工业应用要点:实时

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1972

Kotlin零基础入门到精通(精选)

Kotlin从入门到精通一. Kotlin课程概述1.1 课程安排:1.2 什么是Kotlin?1.3 Kotlin的发展历程1.4 学习目标1.5 必备知识1.6 参考资料1.7 Hello,world二. 数据类型2.1 本章目标2.2 Boolean类型2.3 Number类型2.4 Char类型2.5 类与对象2.6 空类型和智能类型转换2.7 包2.8 区间2.9 数组三. 程序结构3.1 常量与变量3.2 函数3.3 Lambda表达式 一. Kotlin课程概述 1.1 课程安排: 课程介绍

暗余的博客 2万+

YOLOv13改进策略【损失函数篇】| 2024 引进Focaler-IoU损失函数 加强边界框回归 (Focaler-DIoU、Focaler-GIoU、Focaler-CIoU)

本文记录的是改进YOLOv13的损失函数,将其替换成。现有研究通过利用边界框之间的几何关系来提高回归性能,但忽略了困难样本和简单样本分布对边界框回归的影响。不同检测任务中困难样本和简单样本的分布不同,对于简单样本占主导的检测任务,关注简单样本的边界框回归有助于提高检测性能;对于困难样本比例较高的检测任务,需要关注困难样本的边界框回归。,提高检测器在不同检测任务中的性能。实现的。

Limiiiing的博客 870

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Kotlin笔记36——open、final和abstract修饰符

声明一个带open方法的open类 在这里插入代码片

裕博的博客 1643

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Kotlin学习历程七:kotlin中的类之密封类、抽象类和内部类(嵌套类)

一、密封类 sealed 1.1 受限的类继承结构 所谓受限的类继承结构,即当类中的一个值只能是有限的几种类型,而不能是其他的任何类型。 这种受限的类继承结构从某种意义上讲,它相当于是枚举类的扩展。但是,我们知道Kotlin的枚举类中的枚举常量是受限的,因为每一个枚举常量只能存在一个实例。 但是其和枚举类不同的地方在于,密封类的一个子类可以有可包含状态的多个实例。 也可以说成,密封类是包...

LeeKumaの技术Note 493

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

[技术分享]-是时候关注Kotlin了

编程界小小白一枚,平时刷刷知乎看看博客,偶发性遇见GitChat这个文:https://mp.weixin.qq.com/s/K6NTWV9gth8Ge-eDvTzWfQ于是,顺带科普了一下自己[ 先上Kotlin语言中文版文档:https://www.gitbook.com/book/hltj/kotlin-reference-chinese/details ]Kotlin的来历Kotlin的作...

qiaoqiao0609的博客 317

Kotlin手记(一):基础大杂烩

2011年7月,JetBrains推出Kotlin项目,这是一个面向JVM的新语言2012年2月,JetBrains以Apache 2许可证开源此项目。2016年2月15日,Kotlin v1.0发布,这被认为是第一个官方稳定版本。在Google I/O 2017中,Google宣布在Android上为Kotlin提供最佳支持,取代java成为官方开发语言。

苦逼的程序猿☺ 1800

Kotlin学习历程五:kotlin中的类的使用

一、类的声明 关键字 声明类的关键字为class 声明格式 class Test{ // 属性... ... // 构造函数 ... // 函数 ... // 内部类 ... ... } 当类没有结构体的时候,大括号可以省略。即: class Test   二、类的构造函数 在Kotlin中,允许有一个主构...

LeeKumaの技术Note 682

Kotlin Multiplatform概述(51)

Kotlin Multiplatform是JetBrains推出的一项技术,旨在通过共享代码库,使开发者能够在多个平台上高效开发应用程序。传统上,开发跨平台应用需要为每个平台(如Android、iOS、Web、服务器等)编写独立的代码,这不仅增加了开发成本,还使得维护变得困难。Kotlin Multiplatform通过提供一种"一次编写,多处运行"的解决方案,大大简化了跨平台开发流程。

Android开发领域创作者 2216

心有Java,细嗅Kotlin —— 细数 Kotlin 优雅的语法糖

Kotlin的来历 Kotlin的作者是大名鼎鼎的Jetbrains公司。它有一系列耳熟能详的产品,诸如Android兄弟天天用的Android Studio, IntelliJ IDEA, 还有前端的WebStorm, PhpStorm。 2011年7月,JetBrains推出Kotlin项目。2012年2月,JetBrains以Apache 2许可证开源此项目。2016年2月15日

BillyLu的博客 4367

从 Java 到 Kotlin:BasePedo 重构之路给 Android 开发者的启示

BasePedo 是一个开源的 Android 计步器项目,作者从 2016 年用 Java 起步,到 2020 年将 master 与 develop 分支全部用 Kotlin 重写,并专门保留了 java_version 分支供对比学习。这场跨越四年的「从 Java 到 Kotlin」重构,恰好浓缩了许多 Android 开发者正在经历的迁移阵痛与收获。本文将拆解 BasePedo 的代码结构

gitblog_00164的博客 535

AnkiDroid Common 模块解析:纯 JVM 共享代码层的设计原理与源码实践

`common`(AnkiDroid Common)是 Anki-Android 仓库中的一个纯 JVM Gradle 模块,承载着被 `AnkiDroid`、`libAnki`(libanki)、`compat` 等多个模块共同依赖的公共工具函数与核心功能接口定义。本文以 [common/README.md](https://link.gitcode.com/i/224254d42e5d7281

gitblog_00518的博客 989

《 Kotlin + Spring Boot : 下一代 Java 服务端开发 》

《 Kotlin + Spring Boot : 下一代 Java 服务端开发 》 《Spring Boot 开发实战》(基于 Kotlin + Gradle + Spring Boot 2.0 的企业级服务端开发实战) 京东下单链接 https://item.jd.com/31178320122.html 天猫下单链接 https://detail.tm...

AI天才研究院 9299
上一篇: Kotlin学习历程——继承
下一篇: Kotlin学习历程——扩展
hepingdev
博客等级 码龄5年 3581粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hepingdev

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值