Java——接口(interface)(概念理解+应用举例)

简介: Java——接口(interface)(概念理解+应用举例)

1.概念理解


接口(英文:Interface),在 Java 语言中是一个抽象类型,是抽象方法的集合,接口通常用 interface 来声明。一个类通过继承接口的方式,从而来继承并且实现接口中的抽象方法。

接口和类并不一样,但是编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。

除非实现接口的类是抽象类,否则该类要定义并实现接口中的所有抽象方法。

接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。另外,在 Java 语言中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。


1.1 接口与类的相似点


①一个接口可以有多个方法。

②接口文件保存在 .java 的源文件中,文件名使用接口名。(如果此接口与其他类定义在同一个 .java 源文件下,则不会出现以此接口命名的 .java 源文件,只会出现包含 main 方法对应类名的 .java 源文件)

③接口的字节码文件保存在 .class 结尾的二进制文件中。(无论此接口是否与其他类定义在同一个 .java 源文件下,只要编译,就会生成所有的类名、接口名命名的.class 字节码文件)

关于②、③两条内容,大家在创建相应的类、接口之后,可以在 bin 文件夹和 src 文件夹下查看相应的.java、.class文件。

④接口相应的字节码文件必须在与包名称相匹配的目录结构中。(如果是默认包,则在根目录下)


1.2 接口与一般类的区别


①接口不能用于实例化对象,而类可以(不包括抽象类)。 

②接口没有构造方法,接口中可以包含三类方法:抽象方法、默认方法、静态方法。静态方法可以通过“ 接口名.方法名”的形式来调用。抽象方法和默认方法只能通过接口实现类的实例对象来调用。

③接口不能包含成员变量,除了 static 和final 变量。

④接口不是被类继承,而是要被类实现。(虽然我们要使用类去继承接口,但实际上是对接口中的抽象方法的具体实现)

⑤接口支持多继承,但是类不可以多继承。


1.3 接口与抽象类的区别


①抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。

②抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final 类型的。 

③接口和抽象类中都可以有静态代码块和静态方法、抽象方法和默认方法。

④一个类只能继承一个抽象类,而一个类却可以(继承)实现多个接口。


1.4 接口的特性


①接口是隐式抽象的,当声明一个接口的时候,不必使用abstract 关键字。

②接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为public abstract(只能是 public abstract,其他修饰符都会报错),声明时同样不需要abstract 关键字。

③接口中可以包含变量,但是接口中的变量会被隐式的指定为public static final 变量(并且只能是 public,用private 修饰会报编译错误)。

④接口中的方法是不能在接口中实现的,只能由实现这个接口的类来实现接口中的方法,接口中的方法都是公有的。


1.5 接口的实现


①当类实现接口的时候,类要实现接口中所有的方法。否则,该类必须声明为抽象的类。 

②类使用 implements 关键字实现接口。

下面,我们来看一下声明接口以及使用类去实现接口的具体实例:👇👇👇

 

2.应用举例


2.1 类实现接口


//文件名:LikeAnimal.java
public interface LikeAnimal {//声明一个接口
  public void eat();//接口中的两个公共方法
  public void travel();//等待继承此接口的类来实现
        public static void ab() {
    System.out.println("接口中的静态方法!");
  }
}
//文件名:Tiger.java
public class Tiger implements LikeAnimal {//Tiger类继承LikeAnimal接口
  public void eat() {//实现接口中的eat()抽象方法
    System.out.println("老虎正在吃饭!");
  }
  public void travel() {//实现接口中的travel()抽象方法
    System.out.println("老虎喜欢旅行!");
  }
  public String park() {//此类额外创建了一个新方法
    return "公园里有很多只老虎!";
  }
}
//文件名:PlayAnimal.java
public class PlayAnimal {
  public static void main(String[] args) {
    Tiger a=new Tiger();
    a.eat();
    a.travel();//抽象方法和默认方法通过实现该接口的类的实例对象来调用
    System.out.println(a.park());
    LikeAnimal.ab();//通过 接口名.方法名 来调用接口中的静态方法
  }
}

大家可以根据代码以及相应的注释,仔细理解一下,程序运行结果如下:👇👇👇

2.2 接口间的单继承


类继承接口,通过 implements 关键字来实现。

接口继承接口,通过 extends 关键字来实现。(和类与类之间的继承是一样的)

//文件名:Sports.java
public interface Sports {
  public void play();
  public void happy();
  public int interesting(int a);
}
//文件名:Basketball.java
public interface Basketball extends Sports {
  public void perfect();
  public String together(String name1,String name2);
  public int friends(int x);
}
//文件名:Football.java
public interface Football extends Sports {
  public void good();
  public void nice();
}

在 Sports 接口中,自己声明了 3 个方法,所以实现Sports 接口的类需要编写这 3 个方法。

在 Basketball 接口中,自己声明了 3 个方法,并且从Sports 接口中继承了它的 3 个方法。所以实现 Basketball 接口的类需要编写 3+3=6 个方法。

在 Football 接口中,自己声明了2个方法,并且从Sports 接口中继承了它的3个方法。所以实现 Football 接口的类需要编写 2+3=5 个方法。


2.3 接口间的多继承


public interface Player extends Basketball,football {
    ...(具体的代码段)
}

接口 Player 同时继承了 Basketball,football两个接口。

这里就不再详细说了,大家知道接口间不仅可以单继承,也可以多继承就可以了,后面学习的过程中还是会用到的!!! 


2.4 标记接口


最常用的继承接口是没有包含任何方法的接口。

标记接口是没有任何方法和属性的接口,它仅仅表明它的类属于一个特定的类型,供其他代码来测试允许做一些事情。

标记接口作用:简单形象的说就是给某个对象打个标(盖个戳),使对象拥有某个或某些特权。

public interface Animal {
}

没有任何方法的接口被称为标记接口。标记接口主要用于以下两种目的:

①建立一个公共的父接口。②向一个类添加数据类型。

以上就是博主总结的 Java 语言中接口的一些相关概念,希望对大家的学习有所帮助。在后面的博文中,我们将进入“多态”的学习!!!😀😀😀

相关文章
|
人工智能 算法 Java
Java与AI驱动区块链:构建智能合约与去中心化AI应用
区块链技术和人工智能的融合正在开创去中心化智能应用的新纪元。本文深入探讨如何使用Java构建AI驱动的区块链应用,涵盖智能合约开发、去中心化AI模型训练与推理、数据隐私保护以及通证经济激励等核心主题。我们将完整展示从区块链基础集成、智能合约编写、AI模型上链到去中心化应用(DApp)开发的全流程,为构建下一代可信、透明的智能去中心化系统提供完整技术方案。
674 3
|
Java Go 开发工具
【Java】(9)抽象类、接口、内部的运用与作用分析,枚举类型的使用
抽象类必须使用abstract修饰符来修饰,抽象方法也必须使用abstract修饰符来修饰,抽象方法不能有方法体。抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。抽象类可以包含成员变量、方法(普通方法和抽象方法都可以)、构造器、初始化块、内部类(接 口、枚举)5种成分。抽象类的构造器不能用于创建实例,主要是用于被其子类调用。抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类abstract static不能同时修饰一个方法。
438 1
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
983 8
|
算法 安全 Java
除了类,Java中的接口和方法也可以使用泛型吗?
除了类,Java中的接口和方法也可以使用泛型吗?
327 11
|
人工智能 Java API
Java与大模型集成实战:构建智能Java应用的新范式
随着大型语言模型(LLM)的API化,将其强大的自然语言处理能力集成到现有Java应用中已成为提升应用智能水平的关键路径。本文旨在为Java开发者提供一份实用的集成指南。我们将深入探讨如何使用Spring Boot 3框架,通过HTTP客户端与OpenAI GPT(或兼容API)进行高效、安全的交互。内容涵盖项目依赖配置、异步非阻塞的API调用、请求与响应的结构化处理、异常管理以及一些面向生产环境的最佳实践,并附带完整的代码示例,助您快速将AI能力融入Java生态。
1726 12
|
安全 Java API
Java SE 与 Java EE 区别解析及应用场景对比
在Java编程世界中,Java SE(Java Standard Edition)和Java EE(Java Enterprise Edition)是两个重要的平台版本,它们各自有着独特的定位和应用场景。理解它们之间的差异,对于开发者选择合适的技术栈进行项目开发至关重要。
1804 1
|
设计模式 XML 安全
Java枚举(Enum)与设计模式应用
Java枚举不仅是类型安全的常量,还具备面向对象能力,可添加属性与方法,实现接口。通过枚举能优雅实现单例、策略、状态等设计模式,具备线程安全、序列化安全等特性,是编写高效、安全代码的利器。
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
645 1
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
571 1
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案