Kotlin-面向对象

news2025/7/8 0:14:19

本片博客主要写创建对象,创建接口,创建抽象类,data关键字的作用

创建对象

如何声明一个对象,使用class关键字
格式为:
class 对象名字(对象属性名:属性类型…){}
如果对象没有函数的话,可以不写大括号
下面是声明一个对象的最简单写法

//定义一个对象,对象名字是People,包含三个属性,身份证号,姓名,年龄
class People(var idNumber:String, var name:String, var age:Int)

下面创建一个有函数(对象行为)的对象

class People(var idNumber:String, var name:String, var age:Int){
    fun learn(){
        println("$name 同学会学习")
    }
    fun dou(){
        println("$name 同学会逗笑")
    }
    fun song(){
        println("$name 同学会唱歌")
    }
}

下面说一下我对于对象里面创建变量的简单理解。
首先是Kotlin会默认创建构造函数和get()set()方法。所以不需要开发者自己写get()和set()方法。
如果非要自己写,我看了半天,想要实现不给默认值就定义一个变量,好像只能变成抽象类。
创建对象不在括号定义变量
我自己尝试创建对象不在括号定义变量。这里就直接报错了,IDEA给出了4个解决方案,1是设置默认值,2是变成抽象类里面的抽象变量,3是移动到构造函数中(就是移动到对象名后面的括号里面)4是添加get和set方法(也是需要设置默认值的)。

创建一个接口

首先确定一个概念,接口指的是事物的能力。
能力就是说能够干什么。
一般我是用来连接两个独立的对象互相调用函数使用的。
定义一个接口有几个注意事项:
1.接口没有构造函数,所以接口名后面不能有括号。但是可以定义一个没有默认值的变量。
2.定义一个接口使用interface关键字
3.接口里面的参数不能直接调用
下面看一下一个接口的简单写法

interface IHuman {
    var name:String
    fun say(){
        println("$name 在说话")
    }
    fun song()
}

创建一个抽象类

首先确定一个概念,抽象类指的是事物的本质。
本质就是说这个事物有固定属性。
1.抽象类必须用abstract 关键字
2.抽象函数必须没有函数体

 abstract class WoMan(var bb:String) {
     //抽象变量
     abstract var aa:Int

     fun goodGoodStudio(){
        println("好好学习")
     }
     //有abstract 标识的函数,必须没有函数体
     abstract fun dayDayUp()
}

继承和实现

实体对象父类是接口类,叫做“实现”
实体对象父类是抽象类,叫做“继承”
1.实体对象如果“继承”了抽象类,就必须重写没有默认值的抽象变量和抽象函数
2.实体对象如果“实现”了接口类,就必须重写接口类里面的所有变量和没有方法体的函数

class Lady(override var name: String, bb: String, override var aa: Int) : WoMan(bb),IHuman {
    override fun dayDayUp() {
        TODO("Not yet implemented")
    }
    override fun song() {
        TODO("Not yet implemented")
    }
}

总结:
1.接口类用interface 定义
2.抽象类用abstract 定义
3.重写变量和函数的关键字是override

data关键字

还有一个关键字,就是data,在定义对象的时候可以使用这个关键字修饰。
有以下注意事项:
1、主构造函数必须要至少有一个参数
2、主构造函数中的所有参数必须被标记为val或者var
3、数据类不能有以下修饰符:abstract,inner,open,sealed
有以下方便点。
1、toString函数会被复写为打印具体属性的值
2、新增components方法 , 获取构造函数中第几个参数的值
3、新增copy方法 , 可以用来修改具体属性的值
4、重写了hashCode方法 , 不再比较对象引用 , 而是比较对象的值

fun main(args: Array<String>) {
    var stu = Student("大班",12,170,56.0,"1202251993", "名字", 18)
    var stu1 = Student("大班",12,170,56.0,"1202251993", "名字", 19)
    
    //1.直接打印对象
    println(stu)
    //2.使用components 获取构造函数中第几个参数的值。
    //注意直接(.)不出来component,需要自己敲几个字母才能联想出来
    println(stu.component1())
    //3.调用copy函数复制一个对象给新的对象,而且可以复制的时候直接指定某个参数为新的值
    var stu2 = stu.copy(age = 30)
    println(stu2)
    //4.直接对比对象是否相等
    println(stu == stu1)
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python自学之《21天学通Python》(12)——第15章 线程和进程

现代操作系统大多都是多任务的&#xff0c;可以同时执行多个程序。进程是应用程序正在执行的实体&#xff0c;当程序执行时&#xff0c;也就创建了一个主线程。进程在创建和执行时需要一定的资源&#xff0c;比如内存、文件、I/O设备等。大多现代操作系统中支持多线程和进程。线…

JAVA服务端实现页面截屏(附代码)

JAVA服务端实现页面截屏适配需求方案一、使用JxBrowser使用步骤&#xff1a;方案二、JavaFX WebView使用步骤&#xff1a;方案三、Headless Chrome使用步骤&#xff1a;综上方案对比记录我的一个失败方案参考适配需求 有正确完整的地址url&#xff1b;通过浏览器能打开该url对…

Redis缓存一致性问题(缓存更新策略)

Redis缓存的一致性1. 缓存1.1 缓存的作用&#xff1a;1.2 缓存的成本&#xff1a;2. 缓存模型3. 缓存一致性问题3.1 引入3.2 解决(1) 先更新数据库&#xff0c;再手动删除缓存(2) 使用事务保证原子性(3) 以Redis中的TTL为兜底3.3 案例&#xff1a;商铺信息查询和更新(1) 查询商…

5.12 BGP选路原则综合实验

配置BGP的选路原则 1. 实验目的 熟悉BGP的选路的应用场景掌握BGP的选路的配置方法2. 实验拓扑 实验拓扑如图5-11所示: 图5-11:配置BGP的选路原则 3. 实验步骤 (1)配置IP地址 R1的配置

Spring中自定义Session管理,Spring Session源码解析

系列文章&#xff1a;Spring Boot学习大纲&#xff0c;可以留言自己想了解的技术点 目录 系列文章&#xff1a;Spring Boot学习大纲&#xff0c;可以留言自己想了解的技术点 1、session是什么&#xff1f; 1>session在哪里&#xff1f; 2>服务器怎么知道每次说话的是…

Python + Selenium,分分钟搭建 Web 自动化测试框架!

在程序员的世界中&#xff0c;一切重复性的工作&#xff0c;都应该通过程序自动执行。「自动化测试」就是一个最好的例子。 随着互联网应用开发周期越来越短&#xff0c;迭代速度越来越快&#xff0c;只会点点点&#xff0c;不懂开发的手工测试&#xff0c;已经无法满足如今的…

【Datawhale图机器学习】DeepWalk和Node2Vec

DeepWalk&#xff1a;用于图节点嵌入的在线机器学习算法 论文介绍 DeepWalk是基于随机游走的图节点嵌入算法。首次将深度学习和自然语言处理思想用于图机器学习&#xff0c;将随机游走序列与句子类比&#xff0c;节点与单词类比&#xff0c;构建Word2Vec的Skip-Gram无监督&am…

了解Axios及其运用方式

Axios简介 axios框架全称&#xff08;ajax – I/O – system&#xff09;&#xff1a; 基于promise用于浏览器和node.js的http客户端&#xff0c;因此可以使用Promise API 一、axios是干啥的 说到axios我们就不得不说下Ajax。在旧浏览器页面在向服务器请求数据时&#xff0c;…

计算机网络基础知识

目录 通信基础 前言 广播域与冲突域 计算机之间的连接方式 网线直连&#xff08;交叉线&#xff09; 同轴电缆 集线器 网桥 前言 举例&#xff08;计算机6向计算机7相互通信&#xff09; 交换机 交换机原理 路由器 路由器与其他设备区别&#xff1a; 注意&#…

Docker之路(3.docker底层原理、和虚拟机VM对比区别)

1.docker run 流程图 2. docker 底层原理 2.1 docker 是怎么工作的&#xff1f; Docker 是一个 Client-Server 结构的系统&#xff0c;Docker的守护进程运行在主机上&#xff0c; 通过Socket从客户端访问&#xff01; DockerServer接收到Docker-Client的指令&#xff0c;就会执…

【历史上的今天】2 月 22 日:Red Hat Enterprise Linux 问世;BASIC 语言作者出生;计算机协会创始人诞生

整理 | 王启隆 透过「历史上的今天」&#xff0c;从过去看未来&#xff0c;从现在亦可以改变未来。 今天是 2023 年 2 月 22 日&#xff0c;在 1857 年的今天&#xff0c;德国物理学家海因里希赫兹&#xff08;Heinrich Hertz&#xff09;出生。赫兹于 1887 年首先用实验证实了…

Mysql数据备份

一.数据备份的意义&#xff08;1&#xff09;保护数据的安全&#xff1b;&#xff08;2&#xff09;在出现意外的时候&#xff08;硬盘的损坏&#xff0c;断电&#xff0c;黑客的攻击&#xff09;&#xff0c;以便数据的恢复&#xff1b;&#xff08;3&#xff09;导出生产的数…

【音频处理和分析工具】上海道宁与NUGEN Audio助力您更轻松地提供高质量、合规的音频

NUGEN Audio的产品 可在任何情况下提供 先进的保真度和 不受限制的创造力 提供直接和直观的声音处理方式 NUGEN工具可以更轻松地 提供高质量、合规的音频 同时节省时间 降低成本并保留创作过程 开发商介绍 NUGEN Audio是后期制作、音乐和广播领域的知名品牌&#xff0c…

【Mysql】 锁

【Mysql】 锁 文章目录【Mysql】 锁1. 锁1.1 概述1.2 全局锁1.2.1 介绍1.2.2 语法1.2.2.1 加全局锁1.2.2.2 数据备份1.2.2.3 释放锁1.2.3 特点1.3 表级锁1.3.1 介绍1.3.2 表锁1.3.3 元数据锁1.3.4 意向锁1.4 行级锁1.4.1 介绍1.4.2 行锁1.4.3 间隙锁&临键锁1. 锁 1.1 概述…

一起学习用Verilog在FPGA上实现CNN----(八)integrationFC设计

1 integrationFC设计 LeNet-5网络结构全连接部分如图所示&#xff0c;该部分有2个全连接层&#xff0c;1个TanH激活层&#xff0c;1个SoftMax激活层&#xff1a; 图片来自附带的技术文档《Hardware Documentation》 integrationFC部分原理图&#xff0c;如图所示&#xff0c;…

python基于flask共享单车系统vue

可定制框架:ssm/Springboot/vue/python/PHP/小程序/安卓均可开发 目录 1 绪论 1 1.1课题背景 1 1.2课题研究现状 1 1.3初步设计方法与实施方案 2 1.4本文研究内容 2 2 系统开发环境 4 2. 3 系统分析 6 3.1系统可行性分析 6 3.1.1经济可行性 6 3.1.2技术可行性 6 3.1.3运行可行…

应用层协议

目录 应用层常见协议 DNS协议 前言 域名结构 DNS服务器分类 DNS的工作原理 DNS工作原理实例 DNS记录 DHCP协议 静态IP与动态IP DHCP协议好处 DHCP分配IP地址的4阶段 电子邮件 邮件的过程 电子邮件发送过程 pop协议特点 IMAP协议的特点 FTP协议 前言 FTP数据…

操作系统-初次理解

目录 1. 冯诺依曼体系 2. 操作系统 2.1 概念 2.2 解释 2.3 为什么管理 1. 冯诺依曼体系 我相信大家在学习计算机语言时一定听过这个体系结构的&#xff0c;那么这个结构到底是什么呢&#xff1f;上图&#xff1a; 该图是我对冯诺依曼体系结构简单构造&#xff0c;真实情况更…

Java实现多线程有几种方式(满分回答)

目录JDK8 创建的线程的两种方式orcle文档解释方式一&#xff1a;继承Thread类方式二&#xff1a;实现Runnable接口同时用两种的情况其他间接创建方式Callable接口线程池JDK8 创建的线程的两种方式 orcle文档解释 orcle文档&#xff1a;https://docs.oracle.com/javase/8/docs…

【项目精选】动漫论坛的设计与实现(论文+视频+源码)

点击下载源码 作为文化产业的一部分&#xff0c;动漫影响了我国一代又一代青少年&#xff0c;据钱江晚报调查显示&#xff0c;有超过七成的95后愿意从事与动漫相关的行业&#xff0c;可见其对青少年影响力之大。 动漫论坛作为最先开始热爱动漫人士进行交流的方式之一&#xff0…