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

Android学习(五)-Kotlin编程语言-面向对象中的 继承-构造函数-接口三模块学习

首先,我们需要定义一个 Person 类:

open class Person {var name = ""var age = 0fun eat() {println("$name is eating.")}
}

注意,Person 类前面加上了 open 关键字,表示这个类可以被继承。在 Kotlin 中,默认情况下类是不可继承的,必须显式地声明为 open

定义 Student

接下来,我们定义 Student 类并让它继承 Person 类:

class Student : Person() {var sno = ""var grade = 0
}

这里使用冒号 : 来表示继承关系,并且在 Person() 后面加上括号。这表示 Student 类的主构造函数在初始化时会调用 Person 类的无参数构造函数。

构造函数

Kotlin 的构造函数分为两种:主构造函数和次构造函数。这里只讲解主构造函数

主构造函数

主构造函数是最常用的构造函数,直接定义在类名后面。例如:

class Student(val sno: String, val grade: Int) : Person() {
}

在这个例子中,snograde 是通过主构造函数传入的参数,并且被声明为 val,这样它们就成为了 Student 类的属性。

初始化逻辑

如果需要在主构造函数中编写一些初始化逻辑,可以使用 init 块:

class Student(val sno: String, val grade: Int) : Person() {init {println("sno is $sno")println("grade is $grade")}
}
调用父类构造函数

当父类有带参数的构造函数时,子类的主构造函数必须通过括号传递这些参数。例如,修改 Person 类使其带有 nameage 参数:

open class Person(val name: String, val age: Int) {var name = namevar age = agefun eat() {println("$name is eating.")}
}

相应的,Student 类需要修改如下:

class Student(val sno: String, val grade: Int, name: String, age: Int) : Person(name, age) {
}

这里我们在 Student 类的主构造函数中添加了 nameage 参数,并将它们传递给 Person 类的构造函数。


接口

接口

在面向对象编程中,接口是实现多态编程的重要组成部分。Java 是单继承语言,但可以实现多个接口。Kotlin 中的接口与 Java 非常相似,但也有一些细微差别。接下来,我们将通过具体代码学习如何在 Kotlin 中使用接口。

定义接口

首先,我们创建一个名为 fly 的接口,选择类型为“Interface”。

interface fly() { println("cat can fly")
}

在接口中定义的函数不需要有具体的实现,只是声明了需要实现的行为。

实现接口
open class animal{val name:String="小花";var age:Int=0;
}
class cat: animal(),catfly{override fun fly(){println("猫会飞")}
}
interface catfly {fun fly(){println("cat can fly")}
}

在 Kotlin 中,继承父类和实现接口都使用冒号 :,多个接口之间用逗号 , 分隔。

默认实现

Kotlin 允许对接口中的函数提供默认实现。这与 Java 8 引入的默认方法类似。

interface abc { fun num() { println("abc") } 
}

现在,如果某个类实现了 abc 接口但没有重写 num 函数,将自动使用默认实现。


函数的可见性修饰符

在面向对象编程中,控制函数和属性的可见性非常重要。Java 和 Kotlin 都提供了多种可见性修饰符,但它们之间有一些差异。接下来,我们将详细对比这两种语言中的可见性修饰符。

常见的可见性修饰符

修饰符

Java

Kotlin

public

所有类可见(默认)

所有类可见(默认)

private

当前类可见

当前类可见

protected

当前类、子类、同一包路径下的类可见

当前类、子类可见

default

同一包路径下的类可见(默认)

internal

同一模块中的类可见

详细说明
  • public: 表示该函数或属性对所有类都可见。在 Kotlin 中,默认情况下所有函数和属性都是 public
  • private: 表示该函数或属性只对当前类内部可见。与其他语言一致。
  • protected: 在 Java 中,表示该函数或属性对当前类、子类和同一包路径下的类可见。而在 Kotlin 中,protected 仅对当前类和子类可见。
  • default (Java): 表示该函数或属性在同一包路径下的类可见。这是 Java 中的一种默认可见性,但在 Kotlin 中不存在。
  • internal (Kotlin): 表示该函数或属性在同一模块中的类可见。这对于模块化开发非常有用,可以隐藏一些内部实现细节。
示例

下面是一些具体的代码示例,展示如何在 Kotlin 中使用不同的可见性修饰符。

Public
public class MyClass {public fun myPublicFunction() {println("public.")}
}
Private
class MyClass {private fun myPrivateFunction() {println("private.")}
}
Protected
open class ParentClass {protected fun myProtectedFunction() {println("This function is protected.")}
}class ChildClass : ParentClass() {fun accessProtectedFunction() {myProtectedFunction()}
}
Internal
internal class MyInternalClass {internal fun myInternalFunction() {println("internal.")}
}

相关文章:

Android学习(五)-Kotlin编程语言-面向对象中的 继承-构造函数-接口三模块学习

首先,我们需要定义一个 Person 类: open class Person {var name ""var age 0fun eat() {println("$name is eating.")} } 注意,Person 类前面加上了 open 关键字,表示这个类可以被继承。在 Kotlin 中&am…...

Java 集合框架中的 List、ArrayList 和 泛型 实例

— Java 集合框架中的 List、ArrayList 和 泛型 在 Java 中,集合框架提供了许多不同类型的集合类,用于存储和操作对象。List 和 ArrayList 是最常用的两种集合类型,而泛型(Generics)则是 Java 中的一项重要特性&…...

计算机网络-L2TP VPN基础概念与原理

一、概述 前面学习了GRE和IPSec VPN,今天继续学习另外一个也很常见的VPN类型-L2TP VPN。 L2TP(Layer 2 Tunneling Protocol) 协议结合了L2F协议和PPTP协议的优点,是IETF有关二层隧道协议的工业标准。L2TP是虚拟私有拨号网VPDN&…...

【Rust自学】4.4. 引用与借用

4.4.0 写在正文之前 这一节的内容其实就相当于C的智能指针移动语义在编译器层面做了一些约束。Rust中引用的写法通过编译器的约束写成了C中最理想、最规范的指针写法。所以学过C的人对这一章肯定会非常熟悉。 喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文…...

LLaMA-Factory 单卡3080*2 deepspeed zero3 微调Qwen2.5-7B-Instruct

环境安装 git clone https://gitcode.com/gh_mirrors/ll/LLaMA-Factory.gitcd LLaMA-Factorypip install -e ".[torch,metrics]"pip install deepspeed 下载模型 pip install modelscope modelscope download --model Qwen/Qwen2.5-7B-Instruct --local_dir /roo…...

[python SQLAlchemy数据库操作入门]-12.直接执行 SQL 语句处理股票数据

哈喽,大家好,我是木头左! 1. SQLAlchemy Core 简介 SQLAlchemy Core 是 SQLAlchemy 库的一个模块,它允许用户直接执行 SQL 语句而不必使用 ORM(对象关系映射)。对于需要精细控制 SQL 查询或处理复杂数据库操作的情况,SQLAlchemy Core 提供了一种灵活而强大的方式来与数…...

【Unity3D】实现可视化链式结构数据(节点数据)

关键词:UnityEditor、可视化节点编辑、Unity编辑器自定义窗口工具 使用Newtonsoft.Json、UnityEditor相关接口实现 主要代码: Handles.DrawBezier(起点,终点,起点切线向量,终点切线向量,颜色,n…...

C# WinForm移除非法字符的输入框

C# WinForm移除非法字符的输入框 文章目录 namespace System.Windows.Forms {using System.ComponentModel;/// <summary>/// 支持移除 非法字符 的输入框。/// </summary>public class RemoveInvalidCharTextBox : TextBox{/// <summary>/// 测试代码&#…...

linux安装宝塔面板及git

宝塔面板安装教程&#xff1a;https://www.bt.cn/new/download.html?bt_lybaidu&sdclkidALfs15q615oG15As&bd_vid9358688624393223862 Centos/OpenCloud/Alibaba稳定版9.0.0 urlhttps://download.bt.cn/install/install_lts.sh;if [ -f /usr/bin/curl ];then curl -s…...

GoTime#34期 Pachyderm, Provenance, Data Lakes

本篇内容是根据2017年2月份#34 Pachyderm, Provenance, Data Lakes音频录制内容的整理与翻译 Joe Doliner 加入了节目&#xff0c;谈论使用 Pachyderm 管理数据湖、数据容器、溯源(provenance) 以及其他有趣的 Go 项目和新闻。 Erik St. Martin: 大家好&#xff0c;欢迎收听新…...

数据库的三范式是什么?

第一范式&#xff08;1NF&#xff09; 每列的原子性&#xff0c;表中的每一个字段都是不可分割的&#xff0c;同一列中不能有多个值。第一范式是对关系模式的基本要求&#xff0c;不满足第一范式的数据库不是关系型数据库。 ・不满足第一范式的示例&#xff1a; 学生编号 学生…...

LOS/NLOS环境建模与三维TOA定位,MATLAB仿真程序,可自定义锚点数量和轨迹点长度

本代码的主要功能是建模 LOS&#xff08;视距&#xff09;和 NLOS&#xff08;非视距&#xff09;环境下的定位系统&#xff0c;估计目标的动态位置&#xff0c;三维空间 文章目录 运行结果源代码代码介绍 总结 运行结果 10个点的轨迹定位&#xff1a; 50个点的轨迹定位&#…...

css

已经学完html了&#xff0c;继续学习前端三剑客html、css、js之一的css。&#x1f600; 1、什么是css css&#xff1a;用于网页结构的布局和修饰的一种样式脚本 层叠样式表&#xff1a;(英文全称&#xff1a;Cascading Style Sheets)&#xff0c; 简称&#xff1a;样式表&…...

探索 Bokeh:轻松创建交互式数据可视化的强大工具

探索 Bokeh&#xff1a;轻松创建交互式数据可视化的强大工具 在数据科学和数据分析领域&#xff0c;交互式数据可视化是一项不可或缺的技能。Bokeh 是一个强大的 Python 库&#xff0c;它可以帮助我们快速构建高质量的交互式图表和仪表盘&#xff0c;同时兼具高性能和灵活性。…...

光谱相机在农业的应用

一、作物生长监测1、营养状况评估 原理&#xff1a;不同的营养元素在植物体内的含量变化会导致植物叶片或其他组织的光谱反射率特性发生改变。例如&#xff0c;氮元素是植物叶绿素的重要组成部分&#xff0c;植物缺氮时&#xff0c;叶绿素含量下降&#xff0c;其在可见光波段&a…...

SYD881X RTC定时器事件在调用timeAppClockSet后会出现比较大的延迟

RTC定时器事件在调用timeAppClockSet后会出现比较大的延迟 这里RTC做了两个定时器一个是12秒,一个是185秒: #define RTCEVT_NUM ((uint8_t) 0x02)//当前定时器事件数#define RTCEVT_12S ((uint32_t) 0x0000002)//定时器1s事件 /*整分钟定时器事件&#xff0c;因为其余的…...

【Java基础面试题026】Java中的String、StringBuffer和StringBuilder的区别是什么?

回答重点 他们都是Java中处理字符串的类&#xff0c;区别主要体现在可变性、线程安全和性能上 1&#xff09;String 不可变&#xff1a;String是不可变类&#xff0c;字符串对象创建&#xff0c;存储在堆中&#xff0c;字符串内容存储在字符串常量池中&#xff0c;一旦创建内…...

Ajax中的axios

既然提到Ajax&#xff0c;那就先来说一说什么是Ajax吧 关于Ajax Ajax的定义 Asynchronous JavaScript And XML&#xff1a;异步的JavaScript和XML。 反正就是一句话总结&#xff1a; 使用XML HttpRequest 对象与服务器进行通讯。 AJAX 是一种在无需重新加载整个网页的情况下&…...

学习ASP.NET Core的身份认证(基于JwtBearer的身份认证3)

根据参考文献1中JWT Token的组成及计算方式&#xff0c;对照参考文献2中的界面&#xff0c;实现简单的JWT Token解析及验证程序&#xff0c;主要功能包括&#xff1a;   1&#xff09;拆分Token字符串&#xff0c;将前两段使用Base64UrlEncoder类解码并转为UTF8字符串&#x…...

jmeter后端监视器

一、概述 JMeter 后端监听器(Backend Listener)是 JMeter 提供的一个功能强大的插件,用于将测试执行期间收集的性能数据发送到外部系统进行监控和分析。通过后端监听器,您可以实时地将 JMeter 测试执行期间收集的数据发送到外部系统,如图形化展示、数据库、数据分析工具等…...

vue CSS 自定义宽高 翻页 剥离 效果

新增需求&#xff0c;客户需要类似PPT的剥离效果用于WEB页面翻页&#xff0c;查找资料后&#xff0c;参考下方的掘金博主的文章&#xff0c;并将HTML修改成vue的页面进行使用。其中宽度、高度改成了变量&#xff0c;样式style中的属性与宽高的关系整理成了公式进行动态计算。 …...

函数:参数与返回值类型

本文我们将深入探讨 函数的参数和返回值类型&#xff0c;这是 TypeScript 中最常用的特性之一。了解如何为函数参数和返回值添加类型&#xff0c;不仅能帮助你避免常见的错误&#xff0c;还能提高代码的可读性和可维护性。 在 JavaScript 中&#xff0c;函数的参数和返回值是没…...

【学习总结|DAY022】Java网络编程

网络编程是Java开发中非常重要的一环&#xff0c;它允许程序与网络上的其他设备进行数据交互。本文将介绍Java网络编程的基础知识&#xff0c;包括网络编程三要素、UDP和TCP通信协议&#xff0c;以及BS架构的原理。 网络编程三要素 网络通信至少需要三个要素&#xff1a;IP地…...

帝国cms同一条信息使用不同的多个内容页模板伪静态实现教程

理论上可以实现一条信息使用无数个内容页模板&#xff0c;实现过程&#xff1a; 1、/e/action目录下新建bishun.php&#xff0c;内容如下&#xff1a; <?php require(../class/connect.php); require(../class/db_sql.php); require(../class/functions.php); require(..…...

解决Linux<云服务器>访问HuggingFace的问题(操作记录)

一、准备配置文件 cache.db clash config.yaml Country.mmdb&#xff08;1&#xff09;cache.db、clash的获取 链接&#xff1a;百度网盘 提取码&#xff1a;82t0 &#xff08;2&#xff09;config.yaml、Country.mmdb的获取 启动本地已安装的clash软件→找到“配置订阅”…...

selenium 报错 invalid argument: invalid locator

环境&#xff1a; Python3.12.2 selenium4.0 报错信息&#xff1a; invalid argument: invalid locator 错误分析&#xff1a; selenium语法错误,find_element方法少写By.XPATH参数 错误语法如下&#xff1a; driver.find_element(//div[id"myid"]) 解决办…...

springboot——登录认证(包括jwt技术、拦截器过滤器)

实现登录的原理 用户名和密码都输入正确,登录成功,否则,登录失败 登录功能的本质:查询,根据用户名和密码查询员工信息 实现登录的步骤 登录需要确定用户的id、username、name、token(用于 身份校验),对此要重新定义一个类LoginInfo public class LoginInfo {priva…...

【IN、NOT、AND、OR】在 MySql 中的使用方法,使用场景、注意事项

目录 IN NOT AND OR 注意事项&#xff1a; 使用场景&#xff1a; IN 用于指定某个字段的值在一个预定义的列表中。 SELECT * FROM users WHERE age IN (20, 25, 30);查询返回 age 字段 是20、25 、30 的用户记录。 NOT 用于对条件进行否定。 查询将返回与指定 条件相…...

html <a>设置发送邮件链接、打电话链接 <a href=“mailto:></a> <a href=“tel:></a>

1.代码 <ul><li>电话&#xff1a;<a href"tel:18888888888">188-8888-8888</a></li><li>邮箱&#xff1a;<a href"mailto:10000qq.com">10000qq.com</a></li><li>邮箱&#xff1a;<a hre…...

Mac上详细配置java开发环境和软件(更新中)

文章目录 概要JDK的配置JDK下载安装配置JDK环境变量文件 Idea的安装Mysql安装和配置Navicat Premium16.1安装安装Vscode安装和配置Maven配置本地仓库配置阿里云私服Idea集成Maven Cpolar快速入门 概要 这里使用的是M3型片 14.6版本的Mac 用到的资源放在网盘 链接: https://pan…...

游戏渠道假量解决方案

某推广公司在推广过程中被查出“短期内点击量激增”“存在同一地址多次访问”“已注册用户重复注册”等数据作弊行为&#xff0c;法院判罚退还服务费200余万元&#xff0c;并赔偿违约金约350万元。 某公司为提升其游戏在应用商店榜单排名&#xff0c;委托某网络公司进行下载、注…...

Java重要面试名词整理(二):SpringMyBatis

文章目录 Spring篇Spring核心推断构造方法AOP动态代理Advice的分类Advisor的理解AOP相关的概念 定义BeanASM技术JFR依赖注入循环依赖LifecycleSpring AOT Spring事务Spring事务传播机制Spring事务传播机制是如何实现的呢?Spring事务传播机制分类 SpringMVCHandlerHandlerMappi…...

powershell美化

powershell美化 写在前面 除了安装命令&#xff0c;其他都是测试命令&#xff0c;后续再写进配置文件 安装主题控件 安装主题oh-my-posh&#xff0c;powershell中执行 winget install JanDeDobbeleer.OhMyPosh -s winget oh-my-posh init pwsh | Invoke-Expression # 查看…...

D102【python 接口自动化学习】- pytest进阶之fixture用法

day102 pytest的usefixtures方法 学习日期&#xff1a;20241219 学习目标&#xff1a;pytest基础用法 -- pytest的usefixtures方法 学习笔记&#xff1a; fixture调用方法 实际应用 总结 pytest.mark.usefixtures(func)&#xff0c;pytest的usefixtures方法&#xff0c;无…...

Excel生成DBC脚本源文件

Excel制作 新建一个Excel&#xff0c;后缀为“.xls” 工作本名称改为“CAN_Matrix” 在首行按照列来起名字&#xff0c;在里面只需要填写必须的内容即可。 列数名称第0列Message Name第1列Message Format第2列Message ID第3列Message Length (byte)第4列Message Transmitte…...

【Leetcode 每日一题】2545. 根据第 K 场考试的分数排序

问题背景 班里有 m m m 位学生&#xff0c;共计划组织 n n n 场考试。给你一个下标从 0 0 0 开始、大小为 m n m \times n mn 的整数矩阵 s c o r e score score&#xff0c;其中每一行对应一位学生&#xff0c;而 s c o r e [ i ] [ j ] score[i][j] score[i][j] 表示…...

Spring MVC(上)

上一篇博客的补充: 一般出现这种问题,我们就要检查版本了 我们需要查看这几个地方是否版本是对的 注意: jdk版本运行取决于什么? 1.通过cmd运行,jdk版本就是你设置的环境变量 2.通过Idea运行,取决于该项目设置的JDK版本 创建项目的方式: 1> 我们上个博客用idea进行创建 2…...

【优选算法---归并排序衍生题目】剑指offer51---数组中的逆序对、计算右侧小于当前元素的个数、翻转对

一、剑指offer51---数组中的逆序对 题目链接: LCR 170. 交易逆序对的总数 - 力扣&#xff08;LeetCode&#xff09; 题目介绍&#xff1a; 在数组中的两个数字&#xff0c;如果前面⼀个数字大于后面的数字&#xff0c;则这两个数字组成⼀个逆序对。输入一个数组&#xff0c…...

单体到微服务:电商平台架构的演变与可扩展性探索

目录 一、整体理解可扩展性 二、从电商平台架构发展看架构的可扩展性 &#xff08;一&#xff09;单体架构 &#xff08;二&#xff09;分布式架构 &#xff08;三&#xff09;SOA架构 &#xff08;四&#xff09;微服务架构 三、1号店App服务端架构升级说明 &#xff…...

clickhouse-副本和分片

1、副本 1.1、概述 集群是副本和分片的基础&#xff0c;它将ClickHouse的服务拓扑由单节点延伸到多个节点&#xff0c;但它并不像Hadoop生态的某些系统那样&#xff0c;要求所有节点组成一个单一的大集群。ClickHouse的集群配置非常灵活&#xff0c;用户既可以将所有节点组成…...

C语言版解法力扣题:将整数按权重排序

1.题目描述 我们将整数 x 的 权重 定义为按照下述规则将 x 变成 1 所需要的步数&#xff1a; 如果 x 是偶数&#xff0c;那么 x x / 2 如果 x 是奇数&#xff0c;那么 x 3 * x 1 比方说&#xff0c;x3 的权重为 7 。因为 3 需要 7 步变成 1 &#xff08;3 --> 10 -->…...

ubuntu18.04升级到ubuntu20.04

为了使用qt6&#xff0c;在ubuntu18.04上各种折腾失败&#xff0c;无奈只能升级到ubuntu20.04, 按照网上的教程没成功。自己摸索了 lsb_release -a df -h sudo apt update sudo apt upgrade -y sudo apt dist-upgrade -y sudo apt autoremove -y sudo apt clean sudo apt inst…...

【我的 PWN 学习手札】IO_FILE 之 stdin任意地址写

我们知道&#xff0c;stdin会往“缓冲区”先读入数据&#xff0c;如果我们劫持这个所谓“缓冲区”到其他地址呢&#xff1f;是否可以读入数据到任意地址&#xff1f;答案是肯定的。 注意&#xff01;代码中的“-------”分隔&#xff0c;是为了区分一条调用链上不同代码片段&am…...

<mutex>注释 11:重新思考与猜测、补充锁的睡眠与唤醒机制,结合 linux0.11 操作系统代码的辅助(上)

&#xff08;46&#xff09;问题的起源&#xff1a; 因为上面的内核代码&#xff0c;我们编写多线程代码时&#xff0c;对手里的家伙事不那么自信。但我们知道&#xff0c;多线程在竞争锁时&#xff0c;若得不到锁&#xff0c;会进入睡眠&#xff0c;并会在被唤醒后重新尝试得…...

C/C++圣诞树

系列文章 序号直达链接1C/C爱心代码2C/C跳动的爱心3C/C李峋同款跳动的爱心代码4C/C满屏飘字表白代码5C/C大雪纷飞代码6C/C烟花代码7C/C黑客帝国同款字母雨8C/C樱花树代码9C/C奥特曼代码10C/C精美圣诞树11C/C俄罗斯方块12C/C贪吃蛇13C/C孤单又灿烂的神-鬼怪14C/C闪烁的爱心15C…...

upload-labs-master第21关超详细教程

目录 环境配置解题思路利用漏洞 操作演示 环境配置 需要的东西 phpstudy-2018 链接&#xff1a; phpstudy-2018 提取码&#xff1a;0278 32 位 vc 9 和 11 运行库 链接&#xff1a; 运行库 提取码&#xff1a;0278 upload-labs-master 靶场 链接&#xff1a; upload-lasb-ma…...

Python基础——数学运算

目录 1. 算术运算符 2. 比较运算符 3. 赋值运算符 4. 逻辑运算符 5. 成员运算符 6. 身份运算符 7. 三目运算符 Python数学计算通过多种运算符来执行&#xff0c;常用的运算符类型包括算术运算符、比较运算符、赋值运算符、逻辑运算符、成员运算符、身份运算符、三目…...

ubuntu 安装更新 ollama新版本

ubuntu 安装更新 ollama新版本 我这里是 2024-12-18 ollama 版本是 0.5.3 1手动下载 ollama-linux-amd64.tgz https://github.com/ollama/ollama/releases 2下载脚本 https://ollama.com/install.sh install.sh 和 ollama-linux-amd64.tgz 在相同路径下 修改&#xff1a;…...

汽车IVI中控开发入门及进阶(45):凌阳科技车载娱乐芯片

概述: Sunplus科技有限公司成立于1990年,是一家领先的多媒体和汽车应用芯片提供商,如DVD播放器、便携式DVD播放器、家庭娱乐音频产品、汽车信息娱乐和高级驾驶辅助系统(ADAS)。与此同时,凌阳正在为消费类、便携式和连接设备上的广泛应用提供高速I/O IP、高性能数据转换I…...

Linux export命令

本文来自智谱清言 --------- 在Linux系统中&#xff0c;export 是一个用来设置环境变量的命令。 环境变量是操作系统运行时用于存储有关系统环境的信息的变量&#xff0c;它们对于用户和程序都是可访问的。下面是关于 export 命令的一些基本用法&#xff1a; 基本语法 ba…...