说完 Java 的 Abstract 后再来说说接口 (interface )

如你对 Abstract 修饰的抽象类不是非常了解的话,请自行先考古下。

这篇文章需要对 Java 定义过的抽象类有一些基本的了解才可以。

抽象类和抽象方法

用 Abstract 修饰的类,叫做抽象类,那么用 Abstract 修饰的方法叫做抽象方法。

在 Java 中,喜欢用一些修饰关键字来对类或者变量或者方法来进行修饰。修饰的目的是更加明确一些类或者方法,或者变量的使用。

可以简单的理解为,使用关键字来修饰过的东西用来限制使用范围而已。

关于抽象类和抽象方法:

  • 用 abstract 修饰过的方法所在的类一定是抽象类。
  • 用 abstract 修饰过的类,不一定有抽象方法。

什么是接口

和 abstract 修饰过的类比起来,接口是用 interface 来修饰的,这个是在用 abstract 修饰的类上面进行进一步的限制和简化。

而接口中只能存在 public abstract 方法。

用很多人常使用的定义,接口就就是类似墙上的电源插头,上面定义了某个方法,然后让别人去实现的。

打个不是否恰当的比喻,为了从接口中获得电力,你管这个电力是火电还是核电。

正是因为这样的关系,所有接口中定义的方法必须要有实现。

一个类可以实现多个接口,但接口中定义的所有方法必须全部要实现。

接口中的变量会被隐式地指定为 public static final 变量(并且只能是 public static final变量,用 private 修饰会报编译错误),而方法会被隐式地指定为 public abstract 方法且只能是 public abstract 方法(用其他关键字,比如 private、protected、static、 final 等修饰会报编译错误)。

接口和抽象类的关系

首先可以理解为 interface 就是 abstract 的一个子集,内容和信息比 abstract 更加精简。

interface 中的方法是用来实现的,abstract 中的方法是用来继承的,这 2 个用途不一样。

因为 abstract 不能实例化,那么 interface 也肯定不能实例化了。

实际使用

举个实际使用的例子,我们现在有一个这样的需求,发送一个 HTTP 请求,获得用户的数据。

当我们希望对这个进行实现的时候,我们可以使用 apache 的 httpclient 这个包来完成 http 的调用,我们也可以使用 OKHttp 这个包来实现 http 的调用。

为了定义大家都使用的方法,我们就在这 2 个调用之前,定义了一个接口来要求我们的 2 个子类分别使用不同的包来实现完成调用返回结果。

小问题

如这里,我们只有一个实现,还有必要定义接口吗?

这个问题问得就非常好,如果你真只有一个实现的话,定义接口就纯粹属于脱了裤子放屁了。

当然你是可以定义的,只是定义的接口没有什么太大的意义,因为你就使用了这一个实现,何必再增加一个类搞得程序难读,直接使用实现类就好了。

总结

接口在 Java 中非常常用,但实际使用上,用不好会增加复杂性和没有必要的程序设计。

在日常开发中,大部分公司可能会选择用 Spring 框架。 单例 是Spring 当中bean 的默认范围(Scope)。Spring 容器会为某个bean 定义对象创建唯一的实例

对于一般公司在初期可能更多的是关注业务实现,他们并不在意使用某种类实现,比如说上面的实现的 http 调用,可能就用了 OkHttp 实现就好了。

抽象出来各种接口,其实比较麻烦,软件开发的同事基本上就不写接口了。

这也导致了在你的软件项目中,看到接口的地方越来越少了。因为等于要多写一个类,同时还在这个类中写了不同的限制方法,如果我要加一个方法在接口中,所有的实现类都要加。

如果开始就设计不好的话,要加方法还挺繁琐。

2023-09-11_08-34-48

在 IntelliJ IDEA 中,可以单击接口签名的 I 标记来看看有多少类实现了这个接口。

所以,有关接口的的定义,目前更多用在很多八股文的面试题中,有些所谓的架构师会问下你接口是干什么的,很多情况下可能他们自己都已经不写接口了。

说完 Java 的 Abstract 后再来说说接口 (interface ) - Java - iSharkFly

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

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

相关文章

【软考】系统集成项目管理工程师(三)信息系统集成专业技术知识③

一、云计算 1、定义 通过互联网来提供大型计算能力和动态易扩展的虚拟化资源;云是网络、互联网的一种比喻说法。是一种大集中的服务模式。 2、特点 (1)超大规模(2)虚拟化(3)高可扩展性&…

字符检测专题第一期:OCR技术工业应用浅谈

难题不会做?扫一扫,题目、解析立马出现。寄快递需要输入信息?扫一扫,软件自动提取上传。身份证信息需要录入?扫一扫,立马精准识别。这些都是我们日常司空见惯的动作,而实现这一切正是得益于OCR技…

开开心心带你学习MySQL数据库之节尾篇

Java的JDBC编程 各种数据库,MySQL, Oracle, SQL Server在开发的时候,就会提供一组编程接口(API) API ~~ Application Programming Interface ~~ 应用程序编程接口 计算机领域里面的一个非常常见的概念, 给你个软件,你能对他干啥(从代码层次上的) 基于它提供的这些功能,就可以写…

thinkPhp5返回某些指定字段

//去除掉密码$db new UserModel();$result $db->field(password,true)->where("username{$params[username]} AND password{$params[password]}")->find(); 或者指定要的字段的数组 $db new UserModel();$result $db->field([username,create_time…

旅游复苏弹高OTA业绩,未来走势却有“U型曲线”与“抛物线”之变

文 | 螳螂观察 作者 | 易不二 经历了3年蛰伏,旅游业确实熬出头了,OTA也迎来了强势反弹。 自年初起就逐步恢复的旅游行业,经历了暑期小高潮后,正在逐步以强劲的复苏能力,为OTA们的期中财报增彩。 今年二季度&#x…

测试----计算机网络

文章目录 计算机网络的历史OSI/RM 协议TCP/IP协议IP地址 计算机网络的历史 50-60年代 内部通讯功能(连接的是同一台主机,只能主机和终端之间通信,终端和终端之间的通讯只能依靠主机来传输)60-70年代 主机和主机之间能通讯70年代-…

spring-data-jpa编程中,方法参数的数据类型不一致引发的问题记录

一、代码结构 domain model BookDistributionRepository.java infrastructure.persistence jpa BookDistributionRepositoryJPA.javaBookDistributionRepositoryJPAImpl.java 1、接口BookDistributionRepository.java public interface BookDistributionRepository {List&…

基于java SpringBoot和Vue uniapp的影楼摄影预约小程序

摘要 今天信息技术的发展很快,其足迹在我们的生活中随处可见。它影响着我们的衣食住行等各种需求。影响也在逐渐增加,逐渐渗透到各行各业,在这种背景下,经过实地考察后,为了让婚纱照管理更加高效方便,我决定…

服务端 TCP 连接的 TIME_WAIT 过多问题的分析与解决

https://blog.csdn.net/zxlyx/article/details/120397006 本文给出一个 TIME_WAIT 状态的 TCP 连接过多的问题的解决思路,非常典型,大家可以好好看看,以后遇到这个问题就不会束手无策了。 问题描述 模拟高并发的场景,会出现批量…

【动态规划】01背包问题

文章目录 动态规划(背包问题)1. 01背包2. 分割等和子集3. 目标和4. 最后一块石头的重量 || 动态规划(背包问题) 1. 01背包 题目链接 状态表示 dp[i][j] 表示从前i个物品当中挑选,总体积不超过j,所有选法当中能挑选出…

小米汽车,能否在新能源汽车江湖站稳脚跟?

最近,圈内都在传小米汽车亦庄工厂已试生产近一个月,每周可产50辆样车,正在为首款新能源汽车量产做最后的准备。 此前的业绩交流会上,小米集团总裁卢伟冰透露,小米汽车结束了夏测且进展非常顺利,2024年上半…

前端开发纷繁复杂,是否有更高效的开发方式?

一、前言 此前,我曾跟大家聊到,低代码编程,在现阶段互联网业务疯狂增长的带动之下,被赋予了全新的使命和义务,即帮助开发者在前期以较低成本的方式,快速构建一个可投入市场的应用。 那么,有没有…