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 语言中接口的一些相关概念,希望对大家的学习有所帮助。在后面的博文中,我们将进入多态的学习!!!😀😀😀

相关文章
|
7天前
|
人工智能 Java API
Java与大模型集成实战:构建智能Java应用的新范式
随着大型语言模型(LLM)的API化,将其强大的自然语言处理能力集成到现有Java应用中已成为提升应用智能水平的关键路径。本文旨在为Java开发者提供一份实用的集成指南。我们将深入探讨如何使用Spring Boot 3框架,通过HTTP客户端与OpenAI GPT(或兼容API)进行高效、安全的交互。内容涵盖项目依赖配置、异步非阻塞的API调用、请求与响应的结构化处理、异常管理以及一些面向生产环境的最佳实践,并附带完整的代码示例,助您快速将AI能力融入Java生态。
104 12
|
15天前
|
安全 Java API
Java SE 与 Java EE 区别解析及应用场景对比
在Java编程世界中,Java SE(Java Standard Edition)和Java EE(Java Enterprise Edition)是两个重要的平台版本,它们各自有着独特的定位和应用场景。理解它们之间的差异,对于开发者选择合适的技术栈进行项目开发至关重要。
67 1
|
2月前
|
设计模式 XML 安全
Java枚举(Enum)与设计模式应用
Java枚举不仅是类型安全的常量,还具备面向对象能力,可添加属性与方法,实现接口。通过枚举能优雅实现单例、策略、状态等设计模式,具备线程安全、序列化安全等特性,是编写高效、安全代码的利器。
|
2月前
|
存储 缓存 安全
Java集合框架(二):Set接口与哈希表原理
本文深入解析Java中Set集合的工作原理及其实现机制,涵盖HashSet、LinkedHashSet和TreeSet三大实现类。从Set接口的特性出发,对比List理解去重机制,并详解哈希表原理、hashCode与equals方法的作用。进一步剖析HashSet的底层HashMap实现、LinkedHashSet的双向链表维护顺序特性,以及TreeSet基于红黑树的排序功能。文章还包含性能对比、自定义对象去重、集合运算实战和线程安全方案,帮助读者全面掌握Set的应用与选择策略。
147 23
|
2月前
|
存储 安全 Java
Java集合框架(一):List接口及其实现类剖析
本文深入解析Java中List集合的实现原理,涵盖ArrayList的动态数组机制、LinkedList的链表结构、Vector与Stack的线程安全性及其不推荐使用的原因,对比了不同实现的性能与适用场景,帮助开发者根据实际需求选择合适的List实现。
|
2月前
|
数据采集 JSON Java
Java爬虫获取1688店铺所有商品接口数据实战指南
本文介绍如何使用Java爬虫技术高效获取1688店铺商品信息,涵盖环境搭建、API调用、签名生成及数据抓取全流程,并附完整代码示例,助力市场分析与选品决策。
|
2月前
|
安全 Java 开发者
Java集合框架:详解Deque接口的栈操作方法全集
理解和掌握这些方法对于实现像浏览器后退功能这样的栈操作来说至关重要,它们能够帮助开发者编写既高效又稳定的应用程序。此外,在多线程环境中想保证线程安全,可以考虑使用ConcurrentLinkedDeque,它是Deque的线程安全版本,尽管它并未直接实现栈操作的方法,但是Deque的接口方法可以相对应地使用。
119 12
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
Java 大视界 -- Java 大数据机器学习模型在自然语言生成中的可控性研究与应用(229)
本文深入探讨Java大数据与机器学习在自然语言生成(NLG)中的可控性研究,分析当前生成模型面临的“失控”挑战,如数据噪声、标注偏差及黑盒模型信任问题,提出Java技术在数据清洗、异构框架融合与生态工具链中的关键作用。通过条件注入、强化学习与模型融合等策略,实现文本生成的精准控制,并结合网易新闻与蚂蚁集团的实战案例,展示Java在提升生成效率与合规性方面的卓越能力,为金融、法律等强监管领域提供技术参考。
|
Java
Java’Interface’接口简单练习题
Java’Interface’接口简单练习题
161 0
|
Java
java中的interface接口
接口:java接口是一些方法表征的集合,但是却不会在接口里实现具体的方法。 java接口的特点如下: 1、java接口不能被实例化 2、java接口中声明的成员自动被设置为public,所以不存在private成员 3、java接口中不能出现方法的具体实现。
916 0