Java基础二十(接口)

news/2025/3/26 1:59:16/

1. 接口

java 中接口作用和生活中的接口类似,它提供一种约定,使实现接口的类在形式上保持一致。

抽象类中可以有普通方法二接口中的方法默认都是抽象的,也可以说接口是一个特殊的 抽象类 ,接口不能被实例化,而且没有构造方法。

1.1 定义接口

public interface 接口名 {// 接口成员
}

语法解析

  • 和抽象类不同,定义接口使用 interface 修饰符。抽象类使用 abstract 修饰符。
  • 接口的访问权限是 public 或包访问权限,与类的访问权限类似。
  • 一个接口可以继承其他接口,称为父接口,并且接口可以多继承。它将继承父接口中声明的常量和抽象方法。
  • 成员列表中的成员变量声明 [public] [static] [final] 数据类型 成员变量名 = 常量 ;即 接口中成员变量默认都是 public、static、final 的,因此 public static final 可以省略。
  • 成员列表中的成员方法声明 [public] [abstract] 返回值类型 方法名称(参数列表) ;即 接口中的方法默认都是 public、abstract 的,因此 public abstract 可以省略。

与抽象类一样,使用接口要通过子类,子类通过关键字 implements 关键字实现接口。实现接口的语法格式如下:

public 类名 implements 接口名 {// 实现方法// 普通方法// 属性
}

语法解析

  • 实现接口使用关键字 implements ,实现抽象类使用关键字 extends
  • 一个类可以实现多个接口,各个接口之间用逗号分隔。
  • 实现接口的类必须实现接口中定义的抽象方法,即使类中不使用某个抽象方法也必须实现它,通常用空方法体实现子类不需要的抽象方法,如果抽象方法有返回值,可返回默认值。
  • 接口的实现类允许包含普通方法。
  • 在实现抽象方法是需要指定 public 权限,否则会产生编译错误。

示例

/*** 定义接口,关键词:interface*/
public interface USBInterface {  // 定义USB接口void service();
}// 定义U盘类,实现USB接口
class UDisk implements USBInterface {// 实现接口的抽象方法public void service() {System.out.println("连接USB接口,开始传输数据");}
}// 定义风扇类,实现USB接口
class UsbFan implements USBInterface {// 实现接口的抽象方法public void service() {System.out.println("连接USB接口,风扇开始转动");}
}
public class UsbTest {public static void main(String[] args) {// U盘插入USB接口USBInterface uDisk = new UDisk();uDisk.service();  // 连接USB接口,开始传输数据USBInterface usbFan = new UsbFan();usbFan.service();  // 连接USB接口,风扇开始转动}
}

1.2 实现多个接口

接口本身也可以继承接口,接口继承的语法格式如下:

[修饰符] interface 接口名 extends 父接口1,父接口2,... {// 常量定义// 方法定义
}

java 中继承是单继承,使用 extends 关键字;但是一个类可以实现多个接口,使用 implements , 多个接口之间用 , 隔开。实现多个接口的语法如下:

class 类名 extends 父类名 implements 接口1,接口2,... {// 类的成员
}

一个类可以同时继承和实现接口,extends 要在 implements 之前

public class LenovoComputer extends Computer implements USBInterface,ChargeInterface{}

接口与接口之间是继承关系,使用 extends 关键字。多个接口使用 , 隔开。

public interface USBInterface {void transferData();
}public interface ChargeInterface {void chargeDevice();
}public interface USBC extends USBInterface, ChargeInterface {// 可以添加自己的方法
}public class Main {public static void main(String[] args) {USBC usbC = new SomeClass();usbC.transferData();    // 调用继承自 USBInterface 的方法usbC.chargeDevice();    // 调用继承自 ChargeInterface 的方法}
}class SomeClass implements USBC {@Overridepublic void transferData() {System.out.println("Transferring data via USB-C");}@Overridepublic void chargeDevice() {System.out.println("Charging device via USB-C");}
}

1.3 jdk 8 接口新特性

jdk8.0default 关键字可用于在接口中修饰方法(默认方法),default 修饰的方法可以具体实现,也只能在接口中出现。default 修饰的方法可以被重写。
示例

public interface MyInterface {void existingMethod();default void newDefaultMethod() {System.out.println("This is a new default method.");}
}public class MyClass implements MyInterface {@Overridepublic void existingMethod() {System.out.println("Existing method implementation.");}
}public class Main {public static void main(String[] args) {MyClass myClass = new MyClass();myClass.existingMethod();        // 输出:Existing method implementation.myClass.newDefaultMethod();      // 输出:This is a new default method.}
}

默认方法可以在不破坏已经在使用该接口的所有代码。默认方法有时也称为防御方法(defender method)或 虚拟扩展方法(virtual extension method)

接口中还可以有 static 修饰的方法,称为静态方法(类方法)。 static 方法必须直接使用接口名.方法名调用。

public interface MyInterface {void instanceMethod();static void staticMethod() {System.out.println("This is a static method.");}
}public class MyClass implements MyInterface {@Overridepublic void instanceMethod() {System.out.println("Instance method implementation.");}
}public class Main {public static void main(String[] args) {MyInterface.staticMethod();     // 输出:This is a static method.MyClass myClass = new MyClass();myClass.instanceMethod();       // 输出:Instance method implementation.}
}

1.4 jdk 9.0 中接口的新特性

通过将接口中的方法声明为 private,我们可以定义仅在接口内部使用的辅助方法,这些方法不会成为对外暴露的 API 的一部分。私有方法可以被接口中的其他方法调用,从而提供了代码复用和封装的能力。

public interface MyInterface {void publicMethod();default void defaultMethod() {privateMethod();System.out.println("This is a default method.");}private void privateMethod() {System.out.println("This is a private method.");}
}public class MyClass implements MyInterface {@Overridepublic void publicMethod() {System.out.println("Public method implementation.");}
}public class Main {public static void main(String[] args) {MyClass myClass = new MyClass();myClass.publicMethod();       // 输出:Public method implementation.myClass.defaultMethod();      // 输出:This is a private method.//      This is a default method.}
}

1.5 抽象类和接口的区别

特性接口抽象类
多继承接口可以继承多个父类接口子类只能继承一个直接抽象类
实现子类通过implements实现多个接口子类通过extends继承抽象类
成员接口中只能有常量、抽象方法。JDK8.0及以后的版本中可以有static方法和default方法抽象类中可以有实例成员、静态成员抽象方法。抽象类中不能使用default关键字修饰
成员修饰符接口中只能定义常量(public static final 修饰的变量)抽象类可以定义变量,也可以定义常量
子类实现子类在实现抽象方法时必须指定public权限子类在实现抽象方法时不影响缩小访问权限
构造函数接口中不能定义构造函数抽象类可以有构造函数,但不能进行实例化
最高层接口没有最高层类的最高层是Object
文章来源:https://blog.csdn.net/bao_14440/article/details/132562827
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ppmy.cn/news/1071419.html

相关文章

雪花算法实现原理和精度失效问题

一、雪花算法的实现原理 雪花算法是一个全局唯一算法,它主要出现在像分库分表场景中作为业务主键、 或者作为一些像订单号这类的 id 生成器。 所以单纯就全局唯一性质来说,有很多的实现方式,比如 UUID , Redis 的原子递增 &#…

road to master

零、学习计划 数据库相关 索引 我以为我对数据库索引很了解,直到我遇到了阿里面试官 - 知乎 (zhihu.com)给我一分钟,让你彻底明白MySQL聚簇索引和非聚簇索引 - 知乎 (zhihu.com)聚集索引(聚类索引)与非聚集索引(非聚类…

编程之道:【性能优化】提高软件效率的实际建议和避免常见陷阱

在今天的数字化世界中,软件性能是应用程序成功的关键之一。无论是网页加载速度、移动应用的响应时间还是后端服务器的处理速度,性能都直接影响着用户满意度。在追求高性能时,开发人员需要采取一系列实际建议,同时避免常见的陷阱。…

无涯教程-Python机器学习 - Extra Trees函数

它是袋装决策树集成方法的另一种扩展。在这种方法中,从训练数据集的样本中构建随机树。 在以下Python食谱中,我们将通过在Pima Indians糖尿病数据集上使用sklearn的ExtraTreesClassifier类来构建额外的树集成模型。 首先,导入所需的软件包,如下所示: from pandas import rea…

博流RISC-V芯片Eclipse环境搭建

文章目录 1、下载 Eclipse2、导入 bouffalo_sdk3、编译4、烧录5、使用ninja编译 之前编译是通过 VSCode 编译,通过手工输入 make 命令编译,我们也可以通过 Eclipse 可视化 IDE 来编译、烧录。 1、下载 Eclipse 至 Eclipse 官网 https://www.eclipse.org…

“惠医通-医院挂号订单平台”

结合已学习过的vue3和TS完成的项目,便于患者对自己想要就诊的科室进行挂号,付款 一:项目简介 前端技术栈 Vue3 TS vue-router Element-ui Axios Pinia 项目架构 二:主要模块 1. axios二次封装 1.1 创建实例 //利用axios.creat…

MySQL的mysql-bin.00xx binlog日志文件的清理

目录 引言手工清理配置自动清理 引言 公司一个项目生产环境mysql数据盘占用空间增长得特别快,经过排查发现是开启了mysql的binlog日志。如果把binlog日志关闭,如果操作万一出现问题,就没有办法恢复数据,很不安全,只能…

1960-2022年各国ESG(环境、社会、治理)数据-草案数据集

1960-2022年各国-ESG(环境、社会、治理)-草案数据集 1、时间:1960-2022年 2、范围:世界各国 3、来源:世界银行 4、说明:世界银行的ESG(环境、社会、治理)数据草案数据集涵盖了17…