【从零开始学习JAVA | 第十八篇】接口介绍

news2024/11/19 13:37:15

目录

前言:

接口:

如何定义一个接口:

如何使用一个接口:

接口中成员的特点:

接口与类的区别:  

接口的应用:

总结:


前言:

        接口其实是为了弥补继承的缺点:我们无法让父类完美的适应每一个子类的要求例如我们有一个动物类的父类,有一个蝌蚪类,鱼类,兔子类。如果我们要在蝌蚪和鱼类里面添加一个游泳方法,但是父类中没有,此时我们只能够在鱼类里面实现一个游泳方法,在蝌蚪类里面提供一个游泳方法,这就又拉低了代码的执行效率,因此我们就创建了接口这个概念。

接口:

接口(Interface)是面向对象编程中的一个重要概念,它定义了一个类的外部形式,以定规范使用这个类的方式可以理解为一种约定,规定类能够提供哪些方法和属性。接口通常只包含方法的声明,而不包含具体实现。它们在编程中被用来描述一个或多个类应该支持哪些方法以及这些方法应该如何调用。

在Java中,接口是使用关键字“interface”来声明的。一个接口的方法必须在实现它的类中进行实现,否则编译器就会报错。在实现类中,需要使用“implements”关键字来实现接口的方法。

需要注意的是,一个类可以实现多个接口,但只能继承一个父类。这使得接口成为一种弥补java单继承限制的方式,通过实现多个接口可以获得多种特性。

总之,接口为我们提供了一种规范、高度抽象的编程方式,可以实现代码的灵活性和可扩展性。

其实换句话来讲:接口弥补了只能继承一个父类的缺点,为其他类提供了一个统一的功能函数。

回到刚才的例子,我们就可以创建一个游泳接口,让鱼类和蝌蚪类都使用这个接口,我们就实现了提高效率的目的。

如何定义一个接口:

1. 使用关键字 interface 创建接口。
2. 接口中可以声明常量和方法,但是不能声明成员变量和构造方法,接口中的方法不能有具体实现。
3. 通过接口中方法的声明,来规范类的使用方式。

下面是一个示例接口的定义:

public interface Animal {
    static final String TYPE = "animal";
    void run();
    void eat(String food);
}

如何使用一个接口:

1. 类通常必须实现接口中的所有方法才能使用该接口。
2. 使用关键字implements进行接口的实现。
3. 实现类必须覆盖接口中的所有方法,以提供具体的实现。

下面是一个示例实现类的定义:

public class Dog implements Animal {
    public void run() {
        System.out.println("我是一条狗,我会跑!");
    }
    public void eat(String food) {
        System.out.println("我是一条狗,我正在吃" + food);
    }

}

接口中成员的特点:

成员变量:
        只能是常量,默认修饰符是public static final。

构造方法:
         没有

方法成员:
          只能是抽象方法,默认修饰符:public abstract。

1. 接口中可以声明常量方法,但是不能声明具体实现
2. 接口中声明的方法必须在实现类中进行实现
3. 接口中声明的常量和方法默认为 public static finalpublic abstract 类型
4. 接口中可以包含 default static 方法的实现,这些方法允许在接口中提供默认实现,而无需实现它们的类进行实现。
5. 接口不能被实例化,但可以通过引用实现它的类类型来调用其中声明的方法或访问其中的常量。
6. 接口可以继承一个或多个父接口,继承后可以使用父接口中的方法和常量。

接口与类的区别:  

在面向对象编程中,接口与类是两个重要的概念。虽然它们有一些相似之处,但它们之间也存在一些区别。

1. 继承关系:类可以继承另一个类,也可以实现一个或多个接口。但接口不能直接继承类,只能继承接口。一个类可以继承一个类,并实现多个接口。

2. 相似之处:接口与类都可以包含方法和属性。但是接口中的方法只有方法签名,没有方法实现;而类可以包含方法实现。

3. 区别:接口与类的最大区别是类有构造函数,而接口无法创建实例。此外,类可以定义变量,但接口只能定义常量,也就是 final 变量。另外,类可以使用 private 和 protected 变量,而接口只有 public 变量。接口定义的方法只能是 public abstract,而类可以定义各种类型的方法。接口继承接口时,可以使用 extends 关键字,类继承类时可以使用 extends 关键词,类实现接口时可以使用 implements 关键词。

因此,接口与类之间有一些相似之处,但是它们还是有很多区别。接口提供了一种规范,允许多种不同的实现,而类则提供了一个具体的实现。可以通过继承和实现接口的方式,使得代码更加灵活和可扩展。

JDK7以前:接口中只能定义抽象方法。

JDK8以后:接口中可以定义有方法体的方法。(默认,多态)

JDK9之后:接口中可以定义私有方法。

 这些新增特点都是为了方便接口升级。也就是在版本更新的时候新增接口方法。

接口的应用:

接口在面向对象编程中有很广泛的应用,具体包括以下几个方面。

1. 多态性:

通过接口的实现,实现了不同对象之间的多态性。可以将一个接口的实现传递给一个方法,这个方法可以处理所有实现了这个接口的类的对象。

2. 规范:

通过接口声明的方法,规范了类的使用方式,使得各个类在实现接口的方法时有一个明确的标准。

3. 组合:

通过同时实现多个接口,实现了类的组合。这种方式比类的继承更加灵活,可以在不同的情况下选择不同的组合方式。

4. 扩展:

通过新增接口中的方法,扩展了类的功能,同时不需要对类本身进行修改。使用这种方式可以实现类的开放-关闭原则。

5. 解耦:

接口的使用可以将代码解耦,实现了模块之间的独立性。在接口与实现类之间形成了一个中间层,使得实现类可以独立于接口的具体实现。

总之,接口是面向对象编程中非常重要的一种概念,通过使用接口可以提高代码的可读性、可维护性、可扩展性和可复用性。

总结:

        接口的出现补全了父类在继承时候的缺点,它独立出来了一个功能供子类使用,是父类与子类之间的一个中间层,大大降低了代码的耦合性。

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

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

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

相关文章

C语言文件打开关闭详解、文件顺序读写详解。

文件的打开和关闭 fopen函数原型: FILE *fopen( const char *filename, const char *mode );const char *filename 文件的路径以及名字const char *mode 文件的打开方式 文件打开方式含义如果文件不存在“r”读文件不存在会报错“w”写(清空写)建立一个新的文件“…

【新手上路】如何在Web3时代成为XR创建者

目录 0 XR在Web3里的作用 1 XR的概念、特征、技术、设备、平台、应用和工具 1.1 VR的概念、特征和技术 1.2 AR的概念、特征和技术 1.2 XR的设备、平台、应用和工具 2 选择XR的方法 2.1 何时使用VR 2.2 何时使用AR 3 开发XR作品的4个步骤 4 成为XR构建者的路径 4.1 三…

小程序布局中相对定位的用法

小程序中一般为了有一定的设计效果,会将下边组件的内容提升一点到上边去,比如我们的电商展示模板里,会将商品列表覆盖一点到背景图,效果如下: 这种要如何搭建呢?就是利用到了CSS相对定位的原理 搭建组件 …

27.移除元素

LeetCode-27.移除元素 1、题目描述2、解题思路3、代码实现3.1Java代码实现3.2双指针代码优化 4、解题记录 1、题目描述 题目描述: 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要…

windows搭建vue开发环境

参考博客:最详细的vue安装教程_一只野生程序媛的博客-CSDN博客 Vue安装环境最全教程,傻瓜式安装_浪漫主义码农的博客-CSDN博客 1、安装nodejs,从下面官网下载版本,对应安装就行了: Node.js 中文网 2、安装好后&…

合宙Air724UG Cat.1模块硬件设计指南--天线接口

天线接口 简介 天线是发射和接收电磁波的一个重要的无线电设备,没有天线也就没有无线电通信。天线品种繁多,以供不同频率、不同用途、不同场合、不同要求等不同情况下使用。 特性 LTE天线接口。50 欧姆特性阻抗,不推荐使用PCB板载天线&#…

脚本模式的特点和用法

一、什么是脚本? 脚本(script)是使用一种特定的描述性语言,依据一定的格式编写的可执行文件,又称作宏或批处理文件。脚本通常可以由应用程序临时调用并执行。 简单解释:脚本类似于演戏时用到的剧本,脚本其实就是一系列指令——演员看了指令就…

算法--itemCF

概述: 电子商务网站是个性化 推荐系统重要地应用的领域之一。亚马逊就是个性化推荐系统的积极应用者和推广者,亚马逊的推荐系统深入到网站的各类商品,为亚马逊带来了至少30%的销售额。 不光是电商类,推荐系统无处不在。 QQ&…

【差旅-游记】记一次海南出差

哈喽,大家好!我是雷工! 这篇不是技术分享,是篇差旅记录。 最近出差去了一次海南,应该算得上我目前出差去过最远的地方了,也是我第一次去海南,还是蛮有新鲜感的,因此记录下此次差旅。…

【软件设计师暴击考点】数据库系统高频考点暴击系列

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:软件…

tensorflow2 模型建立与训练

模型的构建: tf.keras.Model 和 tf.keras.layers 模型的损失函数: tf.keras.losses 模型的优化器: tf.keras.optimizer 模型的评估: tf.keras.metrics 模型(Model)与层(Layer) …

Mysql 索引基础介绍

索引基础介绍 索引是什么 MySQL官方:索引(INDEX)是帮助MySQL高效获取数据的数据结构。 面试官问,回:索引是排好序的快速查找数据结构 索引的目的在于提高查询效率,可以类比字典的目录。如果要查mysql这个这…

13. python从入门到精通——Python操作数据库

数据库编程接口:python database API python database API概述 python database API 规范对于关系数据库的访问,Python社区已经制定出一个标准,称为Python Database API,通过这个接口使python跨不同数据库的操作代码可以更加具有…

动态内存管理(malloc,calloc,realloc)

文章目录 1.为什么存在动态内存分配 2.动态内存函数的介绍 3.常见的动态内存错误 4.几个经典的笔试题 5. C/C程序的内存开辟 文章内容 1.为什么存在动态内存分配 我们已经掌握的内存开辟方式有: int val 20;//在栈空间上开辟四个字节 char arr[10] {0};/…

【javascript】闭包

通过定时器从第一个元素开始往后&#xff0c;每隔一秒输出arr数组中的一个元素。 <script>var arr [one, two, three];for(var i 0; i < arr.length; i) {setTimeout(function () {console.log(arr[i]);}, i * 1000);} </script> 但是运行过后&#xff0c;我…

使用生成 AI 实现准确的新闻摘要

shadow 这篇文章介绍了作者 Alessandro Alviani 的实践经验&#xff0c;非常有参考价值。 指令冗余&#xff0c;多步引导&#xff0c;是目前提高LLM输出质量的方法之一。 Towards Accurate Quote-Aware Summarization of News using Generative AI Alessandro Alviani generati…

电容式电动汽车路径规划问题的双级蚁群优化算法

摘要&#xff1a; 电动汽车&#xff08;EV&#xff09;技术的发展导致了一个新的车辆路由问题&#xff08;VRP&#xff09;&#xff0c;称为有容量的电动汽车路由问题&#xff08;CEVRP&#xff09;。由于充电站的数量有限&#xff0c;电动汽车的巡航范围有限&#xff0c;不仅要…

【从零开始学习JAVA | 第十九篇】初识内部类

前言&#xff1a; 内部类是类的五大成员。一个类的其他的成员分别是属性&#xff0c;方法&#xff0c;构造方法&#xff0c;代码块。本文将详细介绍什么是内部类&#xff0c;以及内部类的意义。 内部类&#xff1a; 内部类&#xff08;Inner Class&#xff09;是 Java 中的一个…

MedViT:一种用于广义医学图像分类的鲁棒Vision Transformer

文章目录 MedViT: A Robust Vision Transformer for Generalized Medical Image Classification摘要本文方法Locally Feed-Forward Network 实验实验结果 MedViT: A Robust Vision Transformer for Generalized Medical Image Classification 摘要 卷积神经网络(cnn)在现有医…

实现一个 AI 驱动的马里奥(使用双重深度 Q 网络),它可以自己玩游戏

训练玩马里奥的 RL 智能体 本教程将向您介绍深度强化学习的基础知识。 最后&#xff0c;您将实现一个 AI 驱动的马里奥&#xff08;使用双重深度 Q 网络&#xff09;&#xff0c;它可以自己玩游戏。 # !pip install gym-super-mario-bros7.3.0import torch from torch import …