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

【java基础】接口(interface)

文章目录

  • 基础介绍
  • 接口的定义
  • 关于接口字段和方法的说明
  • 使用接口
  • 抽象类和接口
  • 接口方法冲突的一些说明
    • 方法相同名称和参数,返回值相同
    • 方法名称相同,参数不同,返回值相同
    • 方法返回值不同,名称参数相同
    • 方法完全相同,一个有默认实现
    • 接口和类中方法冲突
  • 总结

基础介绍

接口用来描述类应该做什么,而不是指定它们具体应该怎么做。
在java中,接口不是类,而是对希望符合这个接口的类的一组需求。java只能继承一个类,但是可以实现多个接口。

接口的定义

接口的定义如下

interface sports {}

接口定义其实就是和类定义相似的。只不过把class换成了interface

我们在interface可以定义方法,就像抽象类那样定义未实现的方法即可。类实现接口时就必须重写方法或者自己成为抽象类

interface Sports {void run();
}

在接口里面可以定义方法的默认实现,使用default关键字,如果类实现接口时没有重写该方法,那么该方法就会使用默认实现

interface Sports {void run();default void jump(){}
}

现在,我们可以暂时将接口看做为没有实例字段的抽象类。

关于接口字段和方法的说明

在接口中,我们不能定义实例字段,但是可以定义静态字段。

interface A {public static final int a = 1;
}

但是上面这样写IDEA会有提示

在这里插入图片描述

表示字段冗余,其实,在接口中我们定义的字段只能使用public static final进行修饰

我们在接口中可以定义静态方法

interface A {public static void t() {}
}

对于接口里面的内容,其实我们public修饰符可以不用写,因为接口里面字段和方法的访问修饰符只能是public

使用接口

我们先定义一个接口,内容如下

interface Sports {void run();
}

我们创建一个类来实现接口

class Cat implements Sports {@Overridepublic void run() {System.out.println("cat--run");}
}

这个其实和继承基本类似的,只是将关键字从extends换成了implements

关于接口,我们不能够使用new来实例化一个接口

       Sports sports = new Sports(); // ERROR

但是可以声明接口变量,然后引用实现了这个接口的类对象即可

        Sports cat = new Cat(); // OK

对于接口,我们将其看作实现接口类的父类就很好理解了

抽象类和接口

对于一个类,我们只能继承一个类,但是可以实现多个接口。我们就可以将接口看做没有实例字段,并且可以被多继承的抽象类

interface A {}interface B {}class C implements A, B {}

接口方法冲突的一些说明

方法相同名称和参数,返回值相同

我们知道,一个类可以实现多个接口,如果接口有相同的方法名称和参数会怎么样呢?如果有相同的名称和参数,并且返回值相同,那么我们只需要实现一个t方法即可

interface A {void t1();
}interface B {void t1();
}class C implements A, B {@Overridepublic void t1() {}
}

方法名称相同,参数不同,返回值相同

如果方法只有参数不同,那么我们需要实现2个方法,也就是会进行重载

interface A {void t1();
}interface B {void t1(int a);
}class C implements A, B {@Overridepublic void t1() {}@Overridepublic void t1(int a) {}
}

方法返回值不同,名称参数相同

如果方法名称相同,参数相同,而返回值不同,那么就会报错,我们无法同时实现2个名称相同,参数也相同但是返回值不同的方法。

interface A {int t1();
}interface B {void t1();
}

一个类无法同时实现A接口和B接口

方法完全相同,一个有默认实现

如果2个接口一个有默认实现,一个没有默认实现,对于这种情况,我们也必须实现该方法

interface A {default void t1() {}
}interface B {void t1();
}class C implements A, B {@Overridepublic void t1() {A.super.t1();}
}

但是我们可以通过 接口名.super.方法名调用默认实现的方法

接口和类中方法冲突

对于接口和类冲突的,都以类为准,也就是类优先原则,不管接口是否有默认实现都会被超类中的方法覆盖

interface A {default void t1() {System.out.println("interface");}
}interface B {void t1();
}class C {public void t1() {System.out.println("class");}
}class D extends C implements A, B {}

我们使用D来调用t1方法将会输出class

        D d = new D();d.t1();  // 输出class

总结

对于接口,我们将其看作可以被多继承的,并且不能有实例字段的抽象类就行了。对于接口和接口发生冲突时,只要返回类型相同我们就可以处理,如果返回类型不同那就不能同时实现有冲突的接口了。如果接口和超类发生冲突,那么就是以类优先原则来进行解决的。

相关文章:

【java基础】接口(interface)

文章目录基础介绍接口的定义关于接口字段和方法的说明使用接口抽象类和接口接口方法冲突的一些说明方法相同名称和参数,返回值相同方法名称相同,参数不同,返回值相同方法返回值不同,名称参数相同方法完全相同,一个有默…...

ChatGPT(GPT3.5) OpenAI官方API正式发布

OpenAI社区今天凌晨4点多发送的邮件,介绍了ChatGPT官方API的发布。官方介绍文档地址为“OpenAI API”和“OpenAI API”。 ChatGPT(GPT3.5)官方API模型名称为“gpt-3.5-turbo”和“gpt-3.5-turbo-0301”。API调用价格比GPT text-davinci-003模型便宜10倍。调用费用为…...

CAD中如何将图形对象转换为三维实体?

有些小伙伴在CAD绘制完图纸后,想要将图纸中的某些图形对象转换成三维实体,但却不知道该如何操作,其实很简单,本节CAD绘图教程就和小编一起来了解一下浩辰CAD软件中将符合条件的对象转换为三维实体的相关操作步骤吧! 将…...

【K8S笔记】Kubernetes 集群架构与组件介绍

K8S 官方文档 https://kubernetes.io/zh/docs/home ##注重关注 概念和任务 板块。 K8S 集群架构 K8S也是运用了分布式集群架构: 管理节点/Master 整个集群的管理,任务协作。工作节点/Node 容器运行、删除。 K8S 组件介绍 管理节点/Master 相关组件 …...

9 怎么登录VNC

1)首先在ssh登录后启动vncserver。登陆后输入下面的指令来创建自己的VNC。 命令vncserver :16 –geometry 1900x1000 其中:16是分配的端口号,1900x1000是分辨率。如果没有响应,建议执行下面操作后再次重复上面操作。 命令&#xf…...

MPI ubuntu安装,mpicc,mpicxx,mpif90的区别

介绍 MPI是并行计算的一个支持库,支持对C、C、fortran语言进行并行计算。 安装基础环境 ubuntu进行gcc/g/gfortran的安装: gcc: ubuntu下自带gcc编译器。可以通过gcc -v命令来查看是否安装。 g: sudo apt-get install buil…...

移动端笔记

目录 一、移动端基础 二、视口 三、二倍图/多倍图 四、移动端开发 (一)开发选择 (二)常见布局 (三)移动端技术解决方案 五、移动WEB开发之flex布局 六、移动WEB开发之rem适配布局 #END&#xff08…...

操作系统笔记、面试八股(一)—— 进程、线程、协程

文章目录1. 进程、线程、协程1.1 进程1.1.1 进程间的通信方式1.1.2 进程同步方式1.1.3 进程的调度算法1.1.4 优先级反转1.1.5 进程状态1.1.6 PCB进程控制块1.1.7 进程的创建和撤销过程1.1.8 为什么要有进程1.2 线程1.2.1 为什么要有线程1.2.2 线程间的同步方式1.3 协程1.3.1 什…...

Python每日一练(20230302)

目录 1. 字符串统计 2. 合并两个有序链表 3. 下一个排列 附录 Python字典内置方法 增 删 改 查 其它 1. 字符串统计 从键盘输入一个包含有英文字母、数字、空格和其它字符的字符串,并分别实现下面的功能:统计字符串中出现2次的英文字母&#…...

Numpy课后练习

Numpy课后练习 文章目录 Numpy课后练习一、前言二、题目及答案一、前言 答案仅供参考,谢谢大家! 二、题目及答案 导入Numpy包并设置随机数种子为666 import numpy as np np.random.seed(666)创建并输出一个包含12个元素的随机整数数组r1,元素的取值范围在[30,100)之间 r1 …...

动态规划dp中的子序列、子数组问题总结

目录 定义dp数组 初始化dp数组 状态转移方程 最终结果 题目 定义dp数组 这类问题的共性是会提供两个数组,寻找他们共同的子序列、子数组。设第一个数组为s,第二个数组为t。则可以设二维dp数组,其大小为len(s + 1)*len(t + 1) dp[i][j]表示 s 前 i 个长度,...

Zookeeper3.5.7版本——Zookeeper的概述、工作机制、特点、数据结构及应用场景

目录一、Zookeeper的概述二、Zookeeper的工作机制三、Zookeeper的特点四、Zookeeper的数据结构五、Zookeeper的应用场景5.1、统一命名服务5.2、统一配置管理5.3、统一集群管理5.4、服务器动态上下线5.5、软负载均衡一、Zookeeper的概述 Zookeeper 是一个开源的分布式的&#x…...

安卓逆向学习及APK抓包(二)--Google Pixel一代手机的ROOT刷入面具

注意:本文仅作参考勿跟操作,root需谨慎,本次测试用的N手Pixel,因参考本文将真机刷成板砖造成的损失与本人无关 1 Google Pixel介绍 1.1手机 google Pixel 在手机选择上,优先选择谷歌系列手机,Nexus和Pixel系列&…...

线程池的基本认识与使用

线程池的基本认识与使用线程池线程池工作原理:优点:传统的创建线程方式线程池创建线程使用线程池 池化思想:线程池、字符串常量池、数据库连接池可以提高资源的利用率 线程池工作原理: 预先创建多个线程对象 放入线程池种&#…...

小家电品牌私域增长解决方案来了

小家电品牌的私域优势 01、行业线上化发展程度高 相对于大家电动辄上千上万元的价格,小家电的客单价较低。而且与大家电偏刚需属性不同的是,小家电的消费需求侧重场景化,用户希望通过购买小家电来提高自身的生活品质。这就决定了用户的决策…...

什么是让ChatGPT爆火的大语言模型(LLM)

什么是让ChatGPT爆火的大语言模型(LLM) 更多精彩内容: https://www.nvidia.cn/gtc-global/?ncidref-dev-876561 文章目录什么是让ChatGPT爆火的大语言模型(LLM)大型语言模型有什么用?大型语言模型如何工作?大型语言模型的热门应用在哪里可以找到大型语言…...

【监控】Linux部署postgres_exporter及PG配置(非Docker)

目录一、下载及部署二、postgres_exporter配置1. 停止脚本stop.sh2. 启动脚本start.sh3. queries.yaml三、PostgreSQL数据库配置1. 修改postgresql.conf配置文件2. 创建用户、表、扩展等四、参考一、下载及部署 下载地址 选一个amd64下载 上传至服务器,解压 tax…...

基于Java+SpringBoot+Vue+Uniapp(有教程)前后端分离健身预约系统设计与实现

博主介绍:✌全网粉丝3W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战✌ 博主作品:《微服务实战》专栏是本人的实战经验总结,《Spring家族及…...

【2023】DevOps、SRE、运维开发面试宝典之Redis相关面试题

文章目录 1、redis主从复制原理2、redis哨兵模式的原理3、reids集群原理4、Redis 哈希表进行的触发时机是什么?5、Redis 的 RDB 和 AOF 机制各自的优缺点是什么?这两种机制是否可以混合使用?6、Redis 经常被称为单线程的系统,你如何理解 Redis 的单线程模型7、redis 的事务…...

十五、MyBatis使用PageHelper

1.limit分页 limit分页原理 mysql的limit后面两个数字: 第一个数字:startIndex(起始下标。下标从0开始。) 第二个数字:pageSize(每页显示的记录条数) 假设已知页码pageNum,还有每页…...

【MySQL】B+ 树索引

一、索引是什么 ? 为什么需要索引 ? 索引就是目录,目录就是索引。 索引从 InnoDB 存储引擎数据存储结构上来看,就是为各个页建立的目录。保证我们在查询时,可以通过二分法快速定位到页,再在页内通过二分法…...

Android Gradle Plugin Version 和 Gradle Version 的对应关系

官网参考 以下是插件版本和Gradle 版本对应关系: 插件版本所需的最低 Gradle 版本Android Gradle Plugin VersionGradle Version1.0.0 - 1.1.32.2.1 - 2.31.2.0 - 1.3.12.2.1 - 2.91.5.02.2.1 - 2.132.0.0 - 2.1.22.10 - 2.132.1.3 - 2.2.32.14.1 - 3.52.3.03.33.0…...

更多单词/词组/短语补充和总结(二)

auto 美 /[ˈɔːtoʊ] n.汽车adj.与汽车有关的,汽车的。不要记成“自动的” mobile 美 /[ˈmoʊbl] adj.可移动的;流动的;不要记成“手机”,手机是mobile phone automobile 美 /[ˈɔːtəməbiːl] n.汽车adj.自动的 automatic 美 /[ˌɔːtəˈmtɪk]…...

HEC-HMS和HEC-RAS快速入门、防洪评价报告编制及洪水建模、洪水危险性评价等应用

目录 ①HEC-RAS一维、二维建模方法及实践技术应用 ②HEC-HMS水文模型实践技术应用 ③新导则下的防洪评价报告编制方法及洪水建模实践技术应用 ④基于ArcGIS水文分析、HEC-RAS模拟技术在洪水危险性及风险评估 ⑤山洪径流过程模拟及洪水危险性评价 ①HEC-RAS一维、二维建模方…...

全面了解 B 端产品设计 — 基础扫盲篇

在今天,互联网的影响力与作用与日俱增,除了我们日常生活领域的改变以外,对于商业领域的渗透也见效颇丰。 越来越多的企业开始使用数字化的解决方案来助力企业发展,包括日常管理、运营、统计等等。或者通过互联网的方式开发出新的业务形态,进行产业升级,如这几年风头正劲的…...

顺序表(增删查改)

目录一、什么是顺序表二、顺序表的增删查改2.1 结构体的声明2.2 顺序表的初始化2.3 顺序表检查容量2.4 顺序表尾部插入数据2.5 顺序表头部插入数据2.6 顺序表尾部删除数据2.7 顺序表头部删除数据2.8 顺序表查找数据2.9 顺序表任意位置插入数据2.10 顺序表任意位置删除数据2.11 …...

一款优秀的低代码开发平台是什么样的?

目录 一、一款优秀的低代码平台应该是什么样的? 二、低代码核心能力 01、全栈可视化编程: 02、全生命周期管理: 03、低代码扩展能力: 三、小结 一、一款优秀的低代码平台应该是什么样的? 从企业角度来说&#x…...

ElasticSearch 学习笔记总结(四)

文章目录一、ES继承 Spring Data 框架二、SpringData 功能集成三、ES SpringData 文档搜索四、ES 优化 硬件选择五、ES 优化 分片策略六、ES 优化 路由选择七、ES 优化 写入速度优化七、ES 优化 内存设置八、ES 优化 重要配置一、ES继承 Spring Data 框架 Spring Data 是一个用…...

HDFS文件块大小

HDFS中的文件在物理上是分块存储(Block),块的大小可以通过配置参数(dfs.blocksize)来规定,默认大小在Hadooop2X版本中是128M,老版本中是64M。 思考:为什么块的大小不能设置太小&…...

C++——优先级队列(priority_queue)的使用及实现

目录 一.priority_queue的使用 1.1、基本介绍 1.2、优先级队列的定义 1.3、基本操作(常见接口的使用) 1.4、重写仿函数支持自定义数据类型 二.priority_queue的模拟实现 2.1、构造&&重要的调整算法 2.2、常见接口的实现 push() pop() top() empt…...

网站创建过程/怎么申请网址

开头先理解一下所谓的“均衡” 不能狭义地理解为分配给所有实际服务器一样多的工作量,因为多台服务器的承载能力各不相同,这可能体现在硬件配置、网络带宽的差异,也可能因为某台服务器身兼多职,我们所说的“均衡”,也就…...

大宁网站制作/源码网

认识DOM 文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法。DOM 将HTML文档呈现为带有元素、属性和文本的树结构(节点树)。 先来看看下面代码: 将HTML代码分解为DOM节点层次图: HTML文档可以说由节点构…...

网站制作公司网/营销渠道模式有哪些

2019独角兽企业重金招聘Python工程师标准>>> 1. 运行时配置(php.ini) output_buffering Off display_errors On 2. 函数说明 (1)bool ob_start ([ callback $output_callback [, int $chunk_size [, bool $erase…...

贵州贵阳网站开发/如何推广网站运营

今天给大家介绍一下经典的开源机器学习软件: 编程语言:搞实验个人认为当然matlab最灵活了(但是正版很贵),但是更为前途的是Python(numpyscipymatplotlib)和C/C,这样组合既可搞研究,也…...

建设银行的网站是什么/网络营销外包推广价格

对应Jenkins项目: /data/jenkins/workspace 查看端口状态: netstat -adp | grep 8092 查看 进程id: ps -ef | grep 3532 开发提供: applications.properties 配置文件: server.xml /conf/web.xml context.xml logback.xml 图片上…...

wordpress控件图标/百度 营销推广怎么操作

文章讲的是未来最赚钱的行业三甲,必须必是它们,随着云计算、大数据的发展,人工智能的研发也已经越来越精进,虽然人工智能尚处在初始阶段,但不可否认这个领域存在着大量的商机。 商机大的地方,一定少不了各大…...