关山难越,谁悲失路之人;萍水相逢,尽是他乡之客。
百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程教程 > 技术文章 > 正文

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

guanshanw 2023-09-20 10:56 23 浏览 0 评论

如你对 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 实现就好了。

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

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

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

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

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

相关推荐

七条简单命令让您玩转Git
七条简单命令让您玩转Git

凭借着出色的协作能力、快速部署效果与代码构建辅助作用,Git已经得到越来越多企业用户的青睐。除了用于开发商业及消费级应用之外,众多科学及政府机构也开始尝试使用这...

2023-10-07 12:14 guanshanw

基本完整的关于Git分支branch的操作
基本完整的关于Git分支branch的操作

Git使用背景项目中要用到dev或者其他分支开发完代码,需要将该分支合并到master的需求操作步骤下面以dev名称为lex为分支名为例来操作一遍客户端操作:...

2023-10-07 12:14 guanshanw

Git 进阶(合并与变基)
Git 进阶(合并与变基)

在Git中整合来自不同分支的修改主要有两种方法:合并(merge)以及变基(rebase)合并(merge)merge流程图merge的原理是找到这两个分...

2023-10-07 12:13 guanshanw

Git学习笔记 003 Git进阶功能 part5 合并(第一部分)

合并(merge)是很常用的操作。尤其是一个庞大的很多人参与开发的企业级应用。一般会设定一个主分支,和多个副分支。在副分支开发完成后,合并到主分支中。始终保持主分支是一个完整的,稳定的最新状态的分支。...

非标题党,三张图帮你理解git merge和git rebase的区别
非标题党,三张图帮你理解git merge和git rebase的区别

初始场景:基于正常的开发分支修改几个小bug,然后在合并到开发分支上。gitmergegitcheckoutfeaturegitmergeho...

2023-10-07 12:13 guanshanw

git 初次使用(01)
git 初次使用(01)

先从github上克隆代码下来:使用vscode克隆代码如下图,填写上github仓库地址:vscode有时候克隆代码速度比较慢,可以用命令行方式克隆gitc...

2023-10-07 12:12 guanshanw

Git 远程操作

4.Git远程操作命令说明gitremote远程版本库操作gitfetch从远程获取版本库gitpull下载远程代码并合并gitpush上传远程代码并合并4.1远程版本库操作gitre...

Git常用命令-总结
Git常用命令-总结

创建git用户$gitconfig--globaluser.name"YourName"$gitconfig--globaluser.em...

2023-10-07 12:12 guanshanw

git中删除从别人clone下来项目的git信息,并修改为自己的分支

如果你从别人的Git存储库中克隆了一个项目,并想要删除与该存储库相关的Git信息,并将其修改为你自己的分支,则可以执行以下步骤:使用gitclone命令克隆存储库:gitclone<u...

git系列-回滚和放弃本地修改

回滚历史提交就是reset的功能。这种情况是已经提交远程仓库,需要回滚到之前的提交。gitreset--hardcommitId//注:强制提交后,当前版本后面的提交版本将会删掉!gi...

GIT使用小技巧大全
GIT使用小技巧大全

在大型软件工程的开发过程中,版本控制是无法绕过去的;目前来说,最火的版本控制软件就是GIT了。早两年SVN比较火,不过被大神linus喷了几次后,就日落西山了,...

2023-10-07 12:11 guanshanw

git相关命令-上
git相关命令-上

这些命令都是看了文档后,个人觉得比较有用的一些,展示给大家。回到远程仓库的状态抛弃本地所有的修改,回到远程仓库的状态。gitfetch--all&...

2023-10-07 12:10 guanshanw

Git命令行接口:掌握Git的必备技能
Git命令行接口:掌握Git的必备技能

Git是一款强大的分布式版本控制工具,它支持命令行界面操作。熟练掌握Git命令行接口,是开发者使用Git的必备技能之一。在这篇文章中,我们将介绍Git命令行接口...

2023-10-07 12:10 guanshanw

Git命令详解
Git命令详解

相信各位小伙伴们应该都对git有一些了解,毕竟作为代码管理的神器,就算不是IT行业的小伙伴肯定也或多或少的听说过一些。今天就来和小伙伴们分享一下自己总结的常用命...

2023-10-07 12:10 guanshanw

工作7年收集到的git命令
工作7年收集到的git命令

概念git中的术语解释:仓库也叫版本库(repository)stage:暂存区,add后会存到暂存区,commit后提交到版本库git安装linux...

2023-10-07 12:10 guanshanw

取消回复欢迎 发表评论: