Java基础之接口(interface)详解

news2025/3/13 3:55:03

对Java核心技术卷的一个简单笔记

目录

  • 前言
    • 1.接口的概念
    • 2.接口的声明格式
    • 3.接口的属性
    • 4.接口和抽象类的区别
    • 5.继承和接口混合使用的一些规则
    • 6.继承父类和实现接口时的一些同名冲突问题
      • 6.1方法名冲突
      • 6 .2常量名冲突


前言

总结一下基础阶段接口常见的问题

1.接口的概念

接口 ,由于Java没有多继承,只有单继承,那么需要多个类同时满足一些需求的时候怎么办呢。这就是接口的设计意义,它是希望符合这个接口的类满足的一些需求。可以看作是一种规范。

public interface Comparable {
	
}

2.接口的声明格式

[修饰符] interface 接口名{

 // 公共的静态常量
 // 公共的抽象方法
 
 // 公共的默认方法(JDK1.8 以上)
 // 公共的静态方法(JDK1.8 以上)
 // 私有方法(JDK1.9 以上)
}

为什么Java8以后允许公共的静态方法,和默认方法呢

静态方法
因为之前的标准类库设计中,有很多 Collection/Colletions 或者Path/Paths 这样成对的接口和类,后面的类中都是静态方法,而这些静态方法都是为前面的接口服务的,那么这样设计一对 API,不如把静态方法直接定义到接口中使用和维护更方便。
默认方法
(1)我们要在已有的老版接口中提供新方法时,如果添加抽象方法,就会涉及到原来使用这些接口的类就会有问题,那么为了保持与旧版本代码的兼容性,只能允许在接口中定义默认方法实现。比如:Java8 中对Collection、List、Comparator 等接口提供了丰富的默认方法。
(2)当我们接口的某个抽象方法,在很多实现类中的实现代码是一样的,此时将这个抽象方法设计为默认方法更为合适,那么实现类就可以选择重写,也可以选择不重写。
Tips:Java9可以用私有方法
使用的的很有限,因为private导致只能在几口本身的方法中使用,用途有限,更多是最为接口中其他方法的辅助方法

3.接口的属性

(1)接口不是类。不可以用new实例化接口
(2)可以声明接口,用实现了接口的类来实现
(3)可以用instanceof‘判断对象是都属于哪个接口
(4)接口中所有的方法被设置为public,所有变量总是默认为public static final

4.接口和抽象类的区别

接口(interface)和抽象类最大的区别是多继承和单继承的问题导致的。引入接口的原因也是因为Java是单继承语言,抽象类有着和接口类似的功能,但是限制于单继承。一个类只能继承一个抽象类但是却可以实现多个接口,这就是接口类似于多继承功能的优势。一般来说能设计成接口尽量设计成接口。抽象类和接口还有一些具体的不同。接口可以继承大多数多继承的优势,同时避免多继承的复杂性和低效性。
在这里插入图片描述

5.继承和接口混合使用的一些规则

(1)接口可以继承多个接口,关键字是extends,
(2)可以同时继承父类和实现接口,继承关键字在前,实现关键字在后
(3)接口与实现类对象构成多态引用,实现类实现接口,类似于子类继承父类.
	因此,接口类型的变量与实现类的对象之间,也可以构成多态引用。通过
	接口类型的变量调用方法,最终执行的是你 new 的实现类对象实现的方法体。
 (4)接口不能直接创建对象,但是可以通过接口名直接调用接口的静态方法和静态常量
 (5)对于接口的静态方法,直接使用“接口名.”进行调用即可
    也只能使用“接口名."进行调用,不能通过实现类的对象进行调用
    对于接口的抽象方法、默认方法,只能通过实现类对象才可以调用
    接口不能直接创建对象,只能创建实现类的对象
(1) interface A extends 接口1,接口2 {
}2class B extends C implements 接口1,接口2 {
}3)不粘贴具体代码,比较长,自己可以下去谢谢

(4)接口.静态方法名()
	接口.静态变量

6.继承父类和实现接口时的一些同名冲突问题

我们思考一下这个问题,一个类同时可以继承一个父类和实现多个接口。那么,冲突主要来自如下几种情况:

  • 父类和接口之间同名冲突
  • 实现的多个接口之间的同名冲突
    那么来看看怎么解决吧,分为方法名冲突和变量名冲突

6.1方法名冲突

(1)对于父类和接口之间的同名冲突
遵守的是类优先原则,当一个类,既继承一个父类,又实现若干个接口时,父类中的成员方法与接口中的抽象方法重名,子类就近选择执行父类的成员方。

(2)实现的多个接口之间的同名冲突。
当一个类同时实现了多个父接口,而多个父接口中包含方法签名相同的默认方法时,怎么办呢?

  • 声明接口:选择保留其中一个,通过“接口名.super.方法名"的方法选择保留哪个接口的默认方法。

当一个子接口同时继承了多个接口,而多个父接口中包含方法签名相同的默认方法时,怎么办呢?

  • 子接口重写默认方法
  • 子接口重写默认方法时,default关键字可以保留。
  • 子类重写默认方法时,default关键字不可以保留。

6 .2常量名冲突

(1)当子类继承父类又实现父接口,而父类中存在与父接口常量同名的成员变量,并且该成员变量名在子类中仍然可见。
通过“接口名.变量名"的方法引用父接口的成员变量

(2)当子类同时实现多个接口,而多个接口存在相同同名常量。
此时在子类中想要引用父类或父接口的同名的常量或成员变量时,就会有冲突问题。

通过“super.变量名"的方法引用父类的成员变量

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

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

相关文章

分享一个比对图片是否一致的小工具(来源: github)

运行效果图: 官网: GitHub - codingfishman/image-diff: 一个方便的图片对比工具一个方便的图片对比工具. Contribute to codingfishman/image-diff development by creating an account on GitHub.https://github.com/codingfishman/image-diff 优缺点: 1.采用比对各色块是…

关于 Appium 各种版本的安装,都在这里

大家在初次接触 Appium 时会看到网上各种帖子讲解如何安装 Appium,各种 Appium 版本的安装教程满天飞,而很多帖子中提供的安装教程是已经过时了的,容易误导初学者。这篇文章带着你一起全面了解 Appium 各种版本如何选择如何安装。 一句话概述…

Edge---微软浏览器-兼容性问题-解决办法(详细)

图片现象: 快捷键:winR (进入管理员命令窗口) 输入:regedit (进入注册表编辑器) 点击文件夹:HKEY_LOCAL_MACHINE 找到这个路径的文件项:HKEY_LOCAL_MACHINE\SOFTWARE…

Linux之解除ssh远程登录限制

背景:复制了一个虚拟机,将root密码重置为123456后,使用xshell通过ssh登录竟然失败,检查了很多次,确定root账号密码正确,以下是记录的排查过程。 1、查看ssh登录日志 Ubuntu:/var/log/auth.log…

vue ref和$refs获取组件实例

vue ref和$refs获取组件实例 **创建 工程: H:\java_work\java_springboot\vue_study ctrl按住不放 右键 悬着 powershell H:\java_work\java_springboot\js_study\Vue2_3入门到实战-配套资料\01-随堂代码素材\day04\准备代码\15-ref和$refs获取组件实例 vue --ve…

Linux进阶-ipc信号量

目录 system-V IPC信号量 semget():创建或获取信号量 semop():PV操作 semctl():信号量集的一系列控制操作 sem.h文件 sem.c文件 main.c文件 Makefile文件 执行过程 system-V IPC信号量 本质上是一个计数器,用于协调多进程…

JDK21的虚拟线程是什么?和平台线程什么关系?

虚拟线程(Virtual Thread)是 JDK 而不是 OS 实现的轻量级线程(Lightweight Process,LWP),由 JVM 调度。许多虚拟线程共享同一个操作系统线程,虚拟线程的数量可以远大于操作系统线程的数量。 在引入虚拟线程…

智慧公厕管理系统:让公共厕所管理变得更高效。

公共厕所的管理是城市环境卫生的重要组成部分,而传统的公厕管理方式已经无法满足日益增长的需求。为了提高公厕的管理效率,降低运营成本,智慧公厕管理系统应运而生。本文将以智慧公厕领先厂家广州中期科技有限公司,大量精品案例现…

java运维部署操作手册

关闭防火墙 不管是windows还是linux,首先必须关闭防火墙。 # linux添加8080端口 firewall-cmd --zonepublic --add-port8080/tcp --permanent#删除80端口 firewall-cmd --zonepublic --remove-port8080/tcp --permanent# 刷新使端口立即生效 firewall-cmd --reloa…

成集云 | 1药城对接英克ERP | 解决方案

方案介绍 1药城是中国一家知名的互联网医药零售平台,提供在线药品购买及健康服务。1药城致力于为用户提供方便、安全、优质的购药体验,同时与各大医疗机构合作,为用户提供在线挂号、预约就诊等服务。 英克ERP系统是由英克公司开发的企业资源…

uniapp(uncloud) 使用生态开发接口详情3(新增产品分类,产品列表,新闻列表)

我的想法是有产品分类,产品列表,新闻咨询,新闻列表 项目中, uniCloud > database 目录下新建 sy_product_nav.schema.json // 代码如下 {"bsonType": "object","required": ["classname"],"permission": {"read&…

瓷器文玩经营商城小程序的作用是什么

瓷器文玩商品受到不少人喜欢,无论是高价值物品还是低价饰品,都有较高需求,然而随着线下流量匮乏及线上互联网发展,传统瓷器文玩品牌店也面临着一些难题。 私域是近几年的热词,也有不少品牌基于私域取得了成功&#xf…

uniapp:使用subNVue原生子窗体在map上层添加自定义组件

我们想要在地图上层添加自定义组件,比如一个数据提示框,点一下会展开,再点一下收起,在h5段显示正常,但是到app端真机测试发现组件显示不出来,这是因为map是内置原生组件,层级最高,自…

流程挖掘助力企业数字化转型:CBPM 2023圆桌论坛圆满召开

9月23日至24日,由山东科技大学、山东大学、中国石油大学和中国海洋大学联合承办,RPA中国、山东理工大学、青岛大学协办的第十三届中国业务过程管理大会(CBPM 2023)成功举办! 本次会议共有100余位来自国内外高校和科研…

《低代码指南》——AI低代码维格云架构视图怎么用?

架构视图是一个展示信息层级关系的视图,轻轻拖拽卡片,就能搭建精巧缜密的企业组织架构视图、实现信息结构化。 利用好架构视图,可以很好地解决以下场景: 展示企业/团队的组织关系 可视化管理产品开发架构 统筹全员 OKR 完成情况 架构视图的基础知识​ 架构视图分为以下几个…

深度学习入门(一)之感知机

文章目录 前言什么是感知机简单的逻辑电路与门与非门和或门 感知机的实现简单的实现导入权重和偏置 感知机的局限性异或门线性和非线性 多层感知机已有门电路的组合异或门的实现 代码合集 前言 感知机是由美国学者1957年提出来,作为神经网络的起源算法。因此学习感…

基于jsp+ssm+springboot的高校校园点餐系统【毕业论文+源码】

摘 要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存…

非技术背景项目经理如何发展?

非技术背景的项目经理在现代企业中扮演着重要的角色,他们负责协调和管理项目的各个方面,确保项目按时、按预算和按质量要求完成。对于没有技术背景的项目经理来说,他们需要通过一些特定的方法和策略来发展自己的职业生涯。 首先,…

七大排序的顶级理解(近万字详解)

目录 1. 排序的概念及引用 2.常见的排序算法 2.1直接插入排序 2.2希尔排序( 缩小增量排序 ) 2.3选择排序 2.4堆排序 2.5冒泡排序 2.6快速排序 2.6.1Hoare版 2.6.2挖坑法 2.6.3前后指针 2.7快速排序优化 2.7.1递归优化 2.7.2非递归实现快速排序 2.8归并排序 …

k8s-19 资源限制与监控

资源限制 上传镜像 limitrange 创建pod 自动添加限制 limitrage 是给所有的pod 都加range 自定义限制的pod也需要在limitrange定义的区间内 资源限制 创建的ResourceQuota对象将在default名字空间中添力头下限制:每个容器必须设置内存请求(memory request),内存限…