首页 > 编程语言 >说完 Java 的 Abstract 后再来说说接口 (interface )

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

时间:2023-09-11 23:02:19浏览次数:51  
标签:Java 定义 实现 Abstract 接口 修饰 interface 方法 abstract

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

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

说完 Java 的 Abstract 后再来说说接口 (interface )_抽象方法

抽象类和抽象方法

用 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 实现就好了。

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

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

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

 

说完 Java 的 Abstract 后再来说说接口 (interface )_抽象类_02

 

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

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

 

https://www.isharkfly.com/t/java-abstract-interface/14838

标签:Java,定义,实现,Abstract,接口,修饰,interface,方法,abstract
From: https://blog.51cto.com/cwikius/7439473

相关文章

  • 说完 Java 的 Abstract 后再来说说接口 (interface )
    如你对Abstract修饰的抽象类不是非常了解的话,请自行先考古下。这篇文章需要对Java定义过的抽象类有一些基本的了解才可以。抽象类和抽象方法用Abstract修饰的类,叫做抽象类,那么用Abstract修饰的方法叫做抽象方法。在Java中,喜欢用一些修饰关键字来对类或者变量或者方......
  • Java有关链表的基本操作
    上一篇发表的数组的基本操作,但是数组有优势也有劣势:·具体的优势是:拥有高效的随机访问能力·劣势是:由于排列紧密相连,插入和删除元素都会导致大量元素被迫移动,影响效率。接下来要阐述的数据结构是链表:·先看看单向链表的结构:单向链表的每一个节点又包含两个部分,一部分......
  • 3. Java数据类型
    Java数据类型:基本数据类型和引用数据类型前面我们提到 Java 语言是强类型语言,编译器存储在变量中的数值具有适当的数据类型。学习任何一种编程语言都要了解其数据类型,本文将详细介绍Java中的数据类型。Java语言支持的数据类型分为两种:基本数据类型(PrimitiveType)和引用数据......
  • Java实现简易论文查重
    https://github.com/stopyc/3121005018Java实现简易论文查重软件工程https://edu.cnblogs.com/campus/gdgy/CSGrade21-12作业要求https://edu.cnblogs.com/campus/gdgy/CSGrade21-12/homework/13014作业目标学习使用Java建立工程项目,学会论文查重的具体实现步骤......
  • 2.1 Java程序设计基础
    1Java程序设计基础1.1要想编写规范、可读性高的Java程序,就必须对Java基本语法有所了解。基本语法是所有编程语言都必须掌握的基础知识,也是整个程序代码不可缺少的重要部分。一个Java程序通常由数据类型、变量、运算符和控制流程语句4部分组成。其中数据类型和运算符不仅......
  • Java集合
    集合框架单列集合:双列集合:集合和数组的区别长度:数组固定长度内容:集合只能是引用类型元素:数组只能存储同一类型Collection接口实现类有些可以重复,有些有序,没有直接实现,而是子接口//常用方法list.add(true)//可以添加不同类型 .remove(true)//可以按索引也可以直接删......
  • 无涯教程-JavaScript - ODDFPRICE函数
    描述ODDFPRICE函数返回面值为$100的第一期奇数(短期或长期)证券的价格。语法ODDFPRICE(settlement,maturity,issue,first_coupon,rate,yld,redemption,frequency,[basis])争论Argument描述Required/OptionalSettlement证券的结算日期。证券结算日期是指在......
  • Java(day10):注释
    Java注释前言在编写代码时,注释一直被认为是良好编程实践的一部分。注释可以帮助提高代码的可读性,减少代码的维护成本,同时也是文档化代码的一种方式。本文将介绍Java中的注释类型及其用法。摘要本文将讨论Java中的三种注释类型:单行注释,多行注释和文档注释,并提供一些最佳实践和示......
  • 《Java编程思想第四版》学习笔记27
    //:DirList2.java//UsesJava1.1anonymousinnerclassesimportjava.io.*;publicclassDirList2{publicstaticFilenameFilterfilter(finalStringafn){//Creationofanonymousinnerclass:returnnewFilenameFilter(){St......
  • 1. Java语言概述
    1.Java语言概述1.Java技术体系JavaSE(JavaStandardEdition)标准版JavaEE(JavaEnterpriseEdition)企业版JavaME(JavaMicroEdition)小型版2.Java开发环境介绍‍JDK(javaDevelopmentkit):是Java程序开发工具包,包含JRE和开发人员使用的工具。JRE(JavaRun......