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 同时继承了 Basketballfootball两个接口。

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


2.4 标记接口


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

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

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

public interface Animal {
}

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

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

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

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