Java—抽象类和接口 (´▽`)ノ

目录:


一、抽象类:

1、概念:

          在面向对象中,所有对象都是由类来创建的,但是呢,并不是所有的类都用来创建类,如果一个类不能描述一个具体的对象,那么这个类就是抽象类。

      可以看到,我们的这个父类Shape类中的draw()没有实际的工作,对于图形都是有Shape的子类来完成的,像Shape这种设计为抽象类,而没工作的方法为抽象类。需要使用abstract关键字。

我们知道了抽象类的概念,那么我们要如何使用代码来实现呢?下面我们来看:

2、抽象类语法:

注意:抽象类也是一种类,它内部可以存在属性、方法、构造方法。 

3、抽象类的特性:

 1)、抽象类不能实例化对象:

2)、抽象方法不能是private:

 3)、抽象方法不能被finall 和static修饰:

4)、抽象类必须被继承,并且要重写抽象方法:

         那你可能会想,假如我不在子类中重写抽象方法,想在下一个子类中重写,要如何做到这个操作呢?那我们来看代码:

5)、抽象类不一定有抽象方法,但是有抽象方法的一定是抽象类:

 

4、抽象类的作用: 

      抽象类本身不能被实例化,如果想要使用的话 ,只能通过子类,然后让子类来重写抽象类的抽象方法。

      看到这,就会有疑问,我们普通类也是可以重写方法,也可以被继承,那么我们为什么还要有抽象类呢?

      这是因为抽象类呢,相当于添加了一层检验,如果没重写抽象方法会报错,对于普通类就不会报错。


 二、接口:

1、接口的概念:

         在我们的生活中呢,有很多接口的例子的,比如呢:我们的插座。对于插座来说它可以插很多的东西,比如呢我们的电脑、电视、手机充电器、风扇、抽烟机等等设备。

        通过这个例子呢可以看出,对于接口来说就是公共的行为规范标准,只要遵守这个规范标准就可以使用这个接口。 

        在Java中呢,接口呢就是多个类的公共规范,是一种引用类型。

2、语法: 

   定义接口呢和定义类差不多,就是将类中的class替换成  interface 。咱们看看如何实现的:

 在接口中有一些固定参数咱们来看看:

3、接口的使用: 

    在我们了解接口之后呢,我们要开始使用接口,下面我们开看看接口要如何使用:

接口不能直接使用,需要有类来实现,并且实现接口中的所有抽象方法。 

public class 类名 implements 接口名称 {

}

 

4、接口的特性: 

1)、接口是一种引用,但是不能new对象:

2)、接口中的方法都是默认为 public abstract

3)、接口中的方法不能在接口类中实现,一般由实现接口的类实现。

4)、接口中可以存在变量,但是默认为public static final

5)、接口中不能存在静态代码块和构造方法

6)、接口虽不是类但是在编译后的字节码文件为.class文件

7)、如果这个类没有实现所有的接口的抽象方法,那要把这个类设置为抽象类

5、 实现多接口:

在Java中,不能实现多继承,但是可以实现多接口,对于一个类来说可以继承父类并实现接口:

对于这个例子就是继承并实现单接口。下面让我们看看如何实现多接口:

 

   当一个实现多接口的时候呢,必须要把所有抽象类重写,不然将其设置成抽象类。   

6、接口间的继承:

   接口继承一个接口呢,需要使用的是extends关键字。直接来看示例:

这个呢就是关于接口间的继承,当继承的实现接口时一定要把所有继承下来的抽象方法都重写。 

7、接口的使用:

   我们先来看一段代码:

      在上面这个自定义的类中的呢,我们两个变量,一个是String和int  那么我们思考一下,我们要根据哪种类型来进行比较呢?这种又是怎么做的呢?

     这时候就要用到compareTo这个方法,但是这个方法来自于一个接口,所以我们需要实现Comparable这个接口,并且重写方法。

      OK,我们来看看例子:

      这里知识两组进行排序,但是要是多组进行比较的话,那么要如何做到?我们在数组那里有一个方法叫做sort排序方法,那么我们来看看直接使用这个方法会出现什么结果:

为什么会出现这个异常呢?     所以,只要是自定义的类型,在当我们要比较大小的时候,我们都需要实现Comparable的接口,并且重写 compareTo方法。

          在上面我们使用compareTo的时候,是不是感觉有点麻烦,每次呢,我们只能比较一种成员变量,相比较另一种成员变量的话呢,就需要把改变代码,那么我们有没有一种办法使其可以根据传哪种比较方法就用哪种成员变量呢?

       当然可以,我们使用另一种接口来实现,Comparator这个接口来完成,我们看看如何实现:

 当然对于String类型也可以这样写:

这些对于比较的接口和方法,先大概了解并且会使用就可以,在后面我们还会进行专题介绍。 

8、Clonable接口的使用和深拷贝:

      在Java中,存在一些有用的接口,Clonable就是其中一个接口。在Object类中,有一个方法叫clone,可以进行拷贝对象。 那clone和Clonable又有什么关系呢?先让我们来看看clone:

 这样就实现了clone的克隆方法,这时候呢就存在了一个问题,我们来看:

 

 但是当我们修改ID的时候,就会出现这种情况:

这种现象就做:浅拷贝。

那么我们怎样才能把克隆的ID进行修改,但又不修改本体的ID呢? 我们看如何做到:

 这种现象叫做:深拷贝。 

9、抽象类与接口的区别:

最核心的就是:

       抽象类可以存在普通方法和成员变量,但是接口里面,必须是抽象方法,必须重写。


三、Object类:

1、介绍:

       Object类时Java中默认提供的一个类,在Java中除了Object类之外,所有的类都存在继承关系,都会默认的继承Object类,那么所有的对象都可以用Object类来进行接收。

所以Object是所有类的父类,我们来示范一下:

这次我们对于Object类呢,我们只介绍三种方法,分为toString、equals、hashCode。

2、获取对象的信息(toString):

   对于这个方法呢,我们之前就介绍过,在这里呢就不一一道来了,我们直接举个例子过一下:

 我们直接重写toStirng方法就可以了

3、对象间的比较方法(equals) :

在Java我们经常使用 == 来进行比较的,对于 == 来说:

1):如果 == 两侧是基本类型变量的话,比较的就是值是否相同

2)、如果 == 两侧是引用类型变量,比较的就是他们的地址是否相同

 3)、如果想要比较对象中的内容的话,那么我们要重写equals方法,因为equals方法默认的也是比较地址。 equals的底层代码。比较的也是地址。

 那么我们要如何做呢? 

 当我们要比较对象内容是否相同的时候,我们要重写equals方法

4、hashCode方法: 

      hashCode这个方法帮我们计算了一个具体的对象位置,用16进制输出,这里呢,涉及到了一些数据结构方面的知识,这里我们只要知道是干什么的,如何使用就可以了。 

      我们会认为,当两个方法的对象的成员都相同的时候,认为它们在同一个位置上,如果不重写,当我们使用hashCode的时候,就输出的不一样,比如:

 

所以我们要重写这个方法:

 


总结:

        这次的分享就到这里了,这次的抽象类和接口这个专题,有点多,希望可以耐心看下去,期待我们的下次分享。

        下次我们先把类和对象有一个给补充了,在之后,我们实现一个简单的程序,利用学过的知识。拜拜~~

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

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

相关文章

kotlin简介

Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,被称之为 Android 世界的Swift,由 JetBrains 设计开发并开源。 Kotlin 可以编译成Java字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。 在Google I/O 2017…

嵌入式软件中状态机的几种操作

嵌入式软件中状态机的几种操作 1、状态机的术语 现态:是指当前所处的状态。 条件:又称为“事件”,当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移。 动作:条件满足后执行的动作。动作执行完…

Animate软件基本概念:遮罩层和引导层

这里简单讲一下Animate软件中关于遮罩层和引导层的基本概念。 FlashASer:AdobeAnimate2021软件零基础入门教程https://zhuanlan.zhihu.com/p/633230084 FlashASer:实用的各种Adobe Animate软件教程https://zhuanlan.zhihu.com/p/675680471 FlashASer&…

Hadoop集群安装配置,spark集群安装配置

前提:准备3台linux服务器,并保证其网络可进行相互通信 假设三台机器IP分别为: 192.168.88.101 192.168.88.102 192.168.88.103一.配置三台服务器之间SSH免密登录,关闭防火墙,时间同步 三台服务器均执行以下1,2,3,4,5,6,8命令 1…

【MongoDB 】MongoDB 介绍及应用,设计到4个案例

MongoDB 介绍概述 基础概念 MongoDB 是非关系型数据库,也就是nosql,存储json数据格式会非常灵活,要比数据库mysql/MariaDB更好,同时也能为mysql/MariaDB分摊一部分的流量压力。 对于经常读写的数据他会存入内存,如此…

视频剪辑SDK,人脸美化与滤镜特效,焕发直播新活力

在数字化浪潮席卷全球的今天,直播已成为连接品牌与消费者、创作者与观众的重要桥梁。为了在激烈的直播竞争中脱颖而出,提供高质量、富有创意的直播内容成为关键。美摄科技,作为视频处理技术的先行者,携手其强大的视频剪辑SDK解决方…

2024年计算机类学术会议有哪些

随着科技的飞速发展,计算机科学与技术领域正以前所未有的速度进步,各类学术会议成为了交流最新研究成果、探讨前沿技术趋势的重要平台。2024年,全球范围内将举办多场计算机类学术会议,这些会议不仅汇聚了顶尖的专家学者&#xff0…

一六三、go多版本安装与切换

如何安装多版本 官方安装方法 参考链接 当已安装某个版本后,执行如下命令 go install golang.org/dl/go1.19.7latest go1.19.7 download执行第一行命令后,会在GOPATH中新增go1.19.7。执行第二行命令后,会在sdk目录下载完整的包。 通过sm…

制造知识普及(十)-- 常见的工业软件介绍

「 1. ERP」 企业资源计划(enterprise resource planning,ERP)是制造企业的核心管理软件。ERP系统的基本思想是以销定产,协同管控企业的产、供、销、人、财、物等资源,帮助企业按照销售订单,基于产品的制造…

gitlab-runner /var/run/docker.sock connect permission denied

usermod -aG docker gitlab-runner sudo service docker restart参考:https://gitlab.com/gitlab-org/gitlab-runner/-/issues/3492

如何在 Android 手机/平板电脑上恢复误删除的 DCIM 文件夹

DCIM 文件夹是智能手机和平板电脑上最重要的文件夹之一。许多人报告说他们在 Android 设备上遇到了 DCIM 文件夹为空的问题。实际上,这种情况大多数情况下都会发生,当您意外从 Android 设备中删除 DCIM 文件夹或因病毒攻击、应用程序问题和意外格式化等原…

1-5 C语言 - 类型修饰符关键字const和volatile的概念及使用(超详细)

本节重点讲述类型修饰符关键字const和volatile的概念及使用,如果想详细了解关键字的同学点击下方链接进行跳转 1-1 C语言 - 关键字及其使用(数据类型)-CSDN博客 1-2 C语言 - 控制语句关键字-CSDN博客 1-3 C语言 - 控制语句的使用注意事项(这些绝对是您…

2024鸿蒙开发【面试题库】,转岗看这一篇就够了

鸿蒙面试浪潮来袭,你是否也想着利用这次机会去实现,跳槽涨薪的梦呢? 如果关注了华为鸿蒙的人应该知道:鸿蒙开发岗位需求飙升6倍! 可想而知该岗位前景多么广阔,为此就为大家整理些(鸿蒙HarmonyO…

springboot社区旧物回收系统-计算机毕业设计源码94813

目 录 摘要 1 绪论 1.1 研究背景 1.2研究意义 1.3论文结构与章节安排 2 社区旧物回收系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3 社…

SQL面试题练习 —— 计算用户首单是即时单的比例

目录 1 题目2 建表语句3 题解 题目来源:美团。 1 题目 在外卖订单中,有时用户会指定订单的配送时间。现定义:如果用户下单日期与期望配送日期相同则认为是即时单,如果用户下单日期与期望配送时间不同则是预约单。每个用户下单时间…

gogs的安装和使用(docker)

1.docker安装gogs 1.1 拉取gogs镜像 docker pull gogs/gogs #也可改为自己需要的版本号 1.2 创建存储目录 mkdir /root/gogs 1.3 运行镜像 docker run --namegogs -d -p 10022:22 -p 13000:3000 -v /root/gogs:/data gogs/gogs 1.3.1 指令解析 --namegogs: 指定名称…

文章复现 创新点 代码改进跑通 深度学习

文章复现 创新点 代码改进跑通 深度学习 SCI代码复现 文章复现 数据处理、数据分析、算法、数据结构data structure、机器学习machine learning、深度学习deep learning。创新改进,算法提升 python环境配置 ,深度学习代码调试 、代码复现,py…

数据库优化

文章目录 一、如何定位慢查询二、分析慢SQL(一)Explain 三、索引介绍(一)数据结构1、二叉树2、红黑树3、B树4、B 树 (二)聚集索引&二级索引(三)索引的创建原则(四&am…

ElementUI元件库在Axure中使用

一、ElementUI元件库介绍 ElementUI 是一套为开发者、UI/UX设计师和产品经理准备的基于Vue 2.0的桌面端组件库。它以其优雅的设计和丰富的组件,极大地提升了Web应用的开发效率与用户体验。ElementUI的组件设计精致且符合现代UI规范,包括按钮、表单、弹窗…

指针(一)

指针变量:用来存放地址的变量。 这里讲一下为什么两位为一个字节:首先这是一个十六进制的地址,再十六进制中的F(15)用二进制表示是需要四位(1111),所以一位代表四个bit,两…