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

Kotlin 2.1.0 入门教程(十七)接口

接口

接口可以包含抽象方法的声明,也可以包含方法的实现。

接口与抽象类的不同之处在于,接口无法存储状态。接口可以拥有属性,但这些属性要么必须是抽象的,要么就得提供访问器的实现。

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

interface MyInterface {fun bar()fun foo() {// 可选函数体。}
}

实现接口

一个类或对象可以实现一个或多个接口:

class Child : MyInterface {override fun bar() {}
}

接口中的属性

你可以在接口中声明属性。接口中声明的属性可以是抽象的,也可以为访问器提供实现。接口中声明的属性不能有幕后字段,因此接口中声明的访问器也不能引用它们:

interface MyInterface {// 抽象属性。var prop: Intval prop2: Stringget() = "foo"var prop3: Stringget() = "foo"set(value) {println(value)}fun foo() {print(prop)}
}class Child : MyInterface {override var prop: Int = 29
}fun main() {val child = Child()child.prop = 10child.prop3 = "aaa" // aaa
}

接口继承

一个接口可以从其他接口派生,这意味着它既可以为其他接口的成员提供实现,也可以声明新的函数和属性。很自然地,实现这样一个接口的类只需要定义缺失的实现:

interface Named {val name: String
}interface Person : Named {val firstName: Stringval lastName: Stringoverride val name: String get() = "$firstName $lastName"
}data class Employee(override val firstName: String,override val lastName: String,val position: Position
) : Person

解决覆盖冲突

当你在超类型列表中声明多个类型时,你可能会继承同一个方法的多种实现:

interface A {fun foo() { print("A") }fun bar()
}interface B {fun foo() { print("B") }fun bar() { print("bar") }
}class C : A {override fun bar() { print("bar") }
}class D : A, B {override fun foo() {super<A>.foo()super<B>.foo()}override fun bar() {super<B>.bar()}
}

接口 AB 都声明了函数 foo()bar()。它们都实现了 foo() 方法,但只有 B 实现了 bar() 方法(A 中的 bar() 没有标记为抽象方法,因为在接口中如果函数没有方法体,默认就是抽象的)。现在,如果你从 A 派生出一个具体类 C,你就必须重写 bar() 方法并提供实现。

然而,如果你从 AB 派生出类 D,你需要实现从多个接口继承来的所有方法,并且需要明确指定 D 应该如何实现这些方法。这条规则既适用于你只继承了一种实现的方法(如 bar()),也适用于你继承了多种实现的方法(如 foo())。
B 派生出类 D,你需要实现从多个接口继承来的所有方法,并且需要明确指定 D 应该如何实现这些方法。这条规则既适用于你只继承了一种实现的方法(如 bar()),也适用于你继承了多种实现的方法(如 foo())。

相关文章:

Kotlin 2.1.0 入门教程(十七)接口

接口 接口可以包含抽象方法的声明&#xff0c;也可以包含方法的实现。 接口与抽象类的不同之处在于&#xff0c;接口无法存储状态。接口可以拥有属性&#xff0c;但这些属性要么必须是抽象的&#xff0c;要么就得提供访问器的实现。 接口使用 interface 关键字来定义&#x…...

渗透测试工具:SQLmap安装教程及使用

在渗透测试的世界里&#xff0c;SQL注入攻击无疑是最常见且最具威胁的安全漏洞之一。幸运的是&#xff0c;SQLmap 这个强大的自动化工具&#xff0c;能够帮助我们快速识别和利用这些漏洞。如果你也想了解如何用 SQLmap 进行渗透测试&#xff0c;那么这篇文章就是为你准备的&…...

4.SpringSecurity在分布式环境下的使用

参考 来源于黑马程序员&#xff1a; 手把手教你精通新版SpringSecurity 分布式认证概念说明 分布式认证&#xff0c;即我们常说的单点登录&#xff0c;简称SSO&#xff0c;指的是在多应用系统的项目中&#xff0c;用户只需要登录一次&#xff0c;就可以访 问所有互相信任的应…...

RocketMQ和Kafka如何实现顺序写入和顺序消费?

0 前言 先说明kafka&#xff0c;顺序写入和消费是Kafka的重要特性&#xff0c;但需要正确的配置和使用方式才能保证。本文需要解释清楚Kafka如何通过分区来实现顺序性&#xff0c;以及生产者和消费者应该如何配合。   首先&#xff0c;顺序写入。Kafka的消息是按分区追加写入…...

SQL联合查询

文章目录 MySQL系列&#xff1a;1.内连接2.外连接3.自连接4.子查询5.合并查询6.插入查询 MySQL系列&#xff1a; 初识MySQL&#xff0c;MySQL常用数据类型和表的操作&#xff0c;增删改查(CRUD)操作(总),数据库约束数据库设计 #班级表 drop table if exists class; create ta…...

deepseek:三个月备考高级系统架构师

一、备考总体规划&#xff08;2025年2月11日 - 2025年5月&#xff09; 1. 第一阶段&#xff1a;基础夯实&#xff08;2025年2月11日 - 2025年3月10日&#xff09; 目标&#xff1a;快速掌握系统架构师考试的核心知识点。 重点内容&#xff1a; 计算机组成原理、操作系统、数据…...

支持向量机原理

支持向量机&#xff08;简称SVM&#xff09;虽然诞生只有短短的二十多年&#xff0c;但是自一诞生便由于它良好的分类性能席卷了机器学习领域。如果不考虑集成学习的算法&#xff0c;不考虑特定的训练数据集&#xff0c;尤其在分类任务中表现突出。在分类算法中的表现SVM说是排…...

DeepSeek人工智能AI汽车营销销售培训讲师培训师唐兴通讲课汽车销售大数据存量客户数字化营销数字化销售大模型销售话术引流内容社群私域

唐兴通 数字商业创新实践专家、数字营销与销售顾问 沃顿商学院特邀演讲嘉宾&#xff5c;美国营销协会艾菲奖评委 核心专长&#xff1a; AI商业化应用、数字营销创新、数字新销售能力体系打造、数字化转型、 教学经历&#xff1a;从教20年&#xff0c;执教12所全球顶尖商学院…...

Molecular Communication(分子通信)与 Molecular Semantic Communication(分子语义通信)

1. 引言 随着传统无线通信在极端环境&#xff08;如微观生物体内、海洋深处&#xff09;中的局限性凸显&#xff0c;分子通信&#xff08;Molecular Communication, MC&#xff09;成为一种新型通信范式。分子通信通过分子作为信息载体&#xff0c;在纳米尺度上传输信息&#…...

Webpack代码分割、分割策略性能优化详解

在前端面试中,Webpack 是一个常见的考察点,特别是关于性能优化、构建配置以及代码分割等方面的问题。以下是 Webpack 常见问题详解,包括 代码分割 相关的内容。 1. Webpack 基础概念 1.1 Webpack 是什么? Webpack 是一个前端构建工具,主要用于将项目中的各种资源(JavaS…...

大脑网络与智力:基于图神经网络的静息态fMRI数据分析方法|文献速递-医学影像人工智能进展

Title 题目 Brain networks and intelligence: A graph neural network based approach toresting state fMRI data 大脑网络与智力&#xff1a;基于图神经网络的静息态fMRI数据分析方法 01 文献速递介绍 智力是一个复杂的构念&#xff0c;包含了多种认知过程。研究人员通…...

ArcGIS Pro显示缓存空间不足导致编辑或加载数据显示不完全

ArcGIS Pro对于显示缓存有32GB的限制&#xff0c;所以当缓存设置中&#xff0c;缓存将达到32GB时&#xff0c;会出现编辑、加载slpk显示不全的情况。 清除计算机上的显示缓存方法 1.启动 ArcGlS Pro。单击左下角的设置&#xff0c;然后单击选项&#xff1b; 2.在选项窗口中&…...

天童美语:观察你的生活

在孩子的认知里&#xff0c;世界宛如一片充满神秘色彩的未知之境&#xff0c;有着无尽的奥秘等待他们去探索。家长们&#xff0c;引导孩子用心观察世界&#xff0c;领略其中的美妙&#xff0c;这对孩子的成长进程有着极为关键的作用。贵阳天童教育相信&#xff1a;观察生活&…...

网络通信的基石:深入理解 TCP/IP 协议栈与 TCP/UDP 协议

博文题目:网络通信的基石:深入理解 TCP/IP 协议栈与 TCP/UDP 协议 引言 在当今数字化世界中,网络已经渗透到我们生活的方方面面。从浏览网页、收发邮件,到在线视频、远程会议,所有这些便捷的网络应用都离不开一个至关重要的基础设施——TCP/IP 协议栈。它就像是互联网的…...

数据结构-栈和队列的应用

目录 前言一、栈的应用&#xff08;迷宫问题&#xff09;1.1 问题描述1.2 算法选择1.3 算法精化1.4 算法实现1.5 问题结果 二、队列的应用&#xff08;农夫过河问题&#xff09;2.1 问题描述2.2 算法选择2.3 算法精化2.4 算法实现2.5 问题结果 总结 前言 本篇文章使用两个例子…...

SpringBoot Bug 日志

Spring 循环依赖问题 Bug如下 wxMpConfiguration → subscribeHandler → wxMsgServiceImpl → wxMpConfiguration 解决方案 方案实施方式注意事项接口抽象定义 WxMpService 接口&#xff0c;通过接口注入最佳设计实践 Setter 注入对非必要依赖使用 setter 方法降低耦合度 L…...

halo发布文章的插件问题分析

前言 在准备发文到 halo 系统的时候提示错误如下&#xff0c;全是乱码 尝试将 halo 插件卸载后&#xff0c;再将插件目录下的文件全部删除 插件目录在 C:\Users\Administrator\.vscode\extensions\halo-dev.halo-1.3.0 然后再重新安装插件&#xff0c;在进行初始化的时候依然…...

2.5 模块化迁移策略:从传统项目到模块化系统

模块化迁移策略&#xff1a;从传统项目到模块化系统 将传统 Java 项目迁移至 JDK 9 模块化系统是一项系统性工程&#xff0c;需分阶段实施以降低风险。以下是详细的迁移策略、工具使用和实战示例。 1. 迁移阶段划分 阶段目标关键操作阶段1&#xff1a;兼容性验证确保项目能在…...

java商城解决方案

数字化时代&#xff0c;电子商务已成为企业拓展市场的重要渠道。对于想要建立在线商店的企业来说&#xff0c;选择正确的技术堆栈至关重要。 Java作为一种成熟且广泛使用的编程语言&#xff0c;为构建购物中心提供了强大的功能和灵活性。 商城Java源码&#xff1a;商城开发的核…...

算法-哈希表篇05-四数相加II

四数相加II 力扣题目链接 题目描述 给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a; 0 < i, j, k, l < n nums1[i] nums2[j] nums3[k] nums4[l] 0 解题思路 把数…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

解读《网络安全法》最新修订,把握网络安全新趋势

《网络安全法》自2017年施行以来&#xff0c;在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂&#xff0c;网络攻击、数据泄露等事件频发&#xff0c;现行法律已难以完全适应新的风险挑战。 2025年3月28日&#xff0c;国家网信办会同相关部门起草了《网络安全…...

篇章二 论坛系统——系统设计

目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...

鸿蒙HarmonyOS 5军旗小游戏实现指南

1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;采用DevEco Studio实现&#xff0c;包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...

文件上传漏洞防御全攻略

要全面防范文件上传漏洞&#xff0c;需构建多层防御体系&#xff0c;结合技术验证、存储隔离与权限控制&#xff1a; &#x1f512; 一、基础防护层 前端校验&#xff08;仅辅助&#xff09; 通过JavaScript限制文件后缀名&#xff08;白名单&#xff09;和大小&#xff0c;提…...

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践&#xff0c;很多人以为AI已经强大到不需要程序员了&#xff0c;其实不是&#xff0c;AI更加需要程序员&#xff0c;普通人…...

FTXUI::Dom 模块

DOM 模块定义了分层的 FTXUI::Element 树&#xff0c;可用于构建复杂的终端界面&#xff0c;支持响应终端尺寸变化。 namespace ftxui {...// 定义文档 定义布局盒子 Element document vbox({// 设置文本 设置加粗 设置文本颜色text("The window") | bold | color(…...