Java接口(interface)

embedded/2024/9/23 6:37:01/

上篇小编讲到了抽象类,这篇小编将带领大家进入接口类,一起探索接口类的奥秘。

在这里插入图片描述

1.接口的概念

2.接口的语法

3.接口怎么用?

4.实现多个接口
5. 接口间的继承

一:接口的概念:
生活中我们可以遇到各种各样的接口,例如:电脑的usb接口、插座等等比比皆是。
电脑的USB口上,可以插:U盘、鼠标、键盘…所有符合USB协议的设备;
电源插座插孔上,可以插:电脑、电视机、电饭煲…所有符合规范的设备。

接口(Interface)是计算机科学中的一个核心概念,尤其在面向对象编程(OOP)中扮演着至关重要的角色。接口定义了一组规范或契约,这组规范或契约由一组方法(有时也包括属性、事件等,具体取决于编程语言)组成,但不提供这些方法的实现。接口的主要目的是指定一组方法,让不相关的类可以实现这些方法,从而确保这些类遵循相同的协议或标准。

二:接口的语法与特性:
1.抽象性:接口是抽象的,它只定义方法或属性的签名(即名称、参数列表和返回类型),而不提供具体的实现。实现接口的类必须提供接口中所有方法的具体实现。
2.多态性:通过接口,可以实现多态性。多态性允许我们以统一的接口来操作不同的对象,这些对象可以是接口的不同实现。这提高了代码的灵活性和可扩展性。
3.解耦:接口有助于实现高内聚低耦合的设计原则。通过定义接口,我们可以将类的实现细节与使用该类的代码分离开来,降低了系统各部分之间的依赖关系。
4.标准化:接口为不同的类提供了一种标准化的通信方式。只要类实现了某个接口,就可以保证它遵循了接口定义的规范,从而可以与其他遵循相同接口的类进行交互。
5.灵活性:接口允许我们在不修改现有代码的情况下,通过添加新的实现类来扩展系统的功能。这种能力使得系统更加灵活和易于维护。
6.强制实现:在某些编程语言中,接口可以强制实现接口的类必须提供接口中所有方法的具体实现,这有助于确保类的完整性和一致性。

特性:接口类型是一种引用类型,但是不能直接new接口的对象; 接口中每一个方法都是public的抽象方法, 即接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错);接口中的方法是不能在接口中实现的,只能由实现接口的类来实现;重写接口中方法时,不能使用默认的访问权限;接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量;接口中不能有静态代码块和构造方法;如果类没有实现接口中的所有的抽象方法,则类必须设置为抽象类。

java">public interface 接口名称{
// 抽象方法
public abstract void method1(); // public abstract 是固定搭配,可以不写
public void method2();
abstract void method3();
void method4();
// 注意:在接口中上述写法都是抽象方法,跟推荐方式4,代码更简洁
}

注意:

  1. 创建接口时, 接口的命名一般以大写字母 I 开头.
  2. 接口的命名一般使用 “形容词” 词性的单词.
  3. 阿里编码规范中约定, 接口中的方法和属性不要加任何修饰符号, 保持代码的简洁性.
  4. 三:接口的使用接口不能直接使用,必须要有一个"实现类"来"实现"该接口,实现接口中的所有抽象方法
java">public class 类名称 implements 接口名称{
// ...
}
//类与接口之间是implements实现关系

定义接口

java">public interface Animal {  // 定义一个方法,但不提供实现  void eat();  // 接口中可以定义多个方法  void sleep();  
}

创建类实现接口

java">public class Dog implements Animal {  // 实现eat方法  @Override  public void eat() {  System.out.println("Dog is eating.");  }  // 实现sleep方法  @Override  public void sleep() {  System.out.println("Dog is sleeping.");  }  // Dog类还可以有自己的方法和属性  public void bark() {  System.out.println("Dog is barking.");  }  
}

测试类

java">public class TestInterface {  public static void main(String[] args) {  // 创建Dog类的实例  Animal myDog = new Dog();  // 调用接口中定义的方法  myDog.eat(); // 输出: Dog is eating.  myDog.sleep(); // 输出: Dog is sleeping.  // 注意:我们不能直接调用Dog类特有的方法,除非我们将myDog的类型转换为Dog  // ((Dog) myDog).bark(); // 如果需要调用bark(),可以这样显式转换类型  }  
}

四:实现多个接口

java">// 定义第一个接口  
interface Flyable {  void fly();  
}  // 定义第二个接口  
interface Swimmable {  void swim();  
}  // 定义一个类实现Flyable和Swimmable接口  
class Duck implements Flyable, Swimmable {  // 实现Flyable接口中的fly方法  @Override  public void fly() {  System.out.println("Duck is flying.");  }  // 实现Swimmable接口中的swim方法  @Override  public void swim() {  System.out.println("Duck is swimming.");  }  // Duck类还可以有自己的方法和属性  public void quack() {  System.out.println("Duck is quacking.");  }  
}  // 测试类  
public class TestMultipleInterfaces {  public static void main(String[] args) {  // 创建Duck类的实例  Duck myDuck = new Duck();  // 调用Flyable接口中的方法  myDuck.fly(); // 输出: Duck is flying.  // 调用Swimmable接口中的方法  myDuck.swim(); // 输出: Duck is swimming.  // 调用Duck类特有的方法  myDuck.quack(); // 输出: Duck is quacking.  }  
}

五:接口间的继承
在Java中,类和类之间是单继承的,一个类可以实现多个接口,接口与接口之间可以多继承。即:用接口可以达到多继承的目的。例如:

java">interface Irun{
void run();
}
interface Ifly{
voud fly();
}
//两栖类
interface IAmphibious extends Irun,Ifly{
}
interface Frog implements IAmphibious{
}

通过接口继承创建一个新的接口 IAmphibious 表示 “两栖的”. 此时实现接口创建的 Frog 类, 就继续要实现 run 方法, 也需要实现 fly方法.

java">// 定义第一个接口  
interface Animal {  void eat();  
}  // 定义第二个接口,继承自Animal接口  
interface Mammal extends Animal {  void nurseYoung();  
}  // 定义一个类实现Mammal接口,从而也间接实现了Animal接口  
class Dog implements Mammal {  // 实现Animal接口中的eat方法  @Override  public void eat() {  System.out.println("Dog is eating.");  }  // 实现Mammal接口中的nurseYoung方法  @Override  public void nurseYoung() {  System.out.println("Dog is nursing its young.");  }  
}  // 测试类  
public class TestInterfaceInheritance {  public static void main(String[] args) {  // 创建Dog类的实例  Dog myDog = new Dog();  // 调用从Animal接口继承的方法  myDog.eat(); // 输出: Dog is eating.  // 调用Mammal接口特有的方法  myDog.nurseYoung(); // 输出: Dog is nursing its young.  }  
}

在这里插入图片描述


http://www.ppmy.cn/embedded/115452.html

相关文章

华为静态路由(route-static)

静态路由的组成 在华为路由器中,使用ip route-static命令配置静态路由。 一条静态路由主要包含以下要素: 目的地址:数据包要到达的目标IP地址 子网掩码:用于指定目的地址的网络部分和主机部分 下一跳地址(可选&#…

医院伤员小程序点餐———未来之窗行业应用跨平台架构

一、读取服务器医院信息 var 未来之窗人工智-商家信息-医院职工 {//2024-09-22 cyber_getMerchant_CardUser_V20240922: function(appikkey,merchant_id,store_id,ecogen_sponsor_appid,openid,frommsg,wlzc_callback) {//2023-7-6 里程碑var wlzcapi"加入url";wx.re…

MATLAB分布式计算工具箱:高效并行处理指南

在科学计算和工程模拟中,MATLAB的分布式计算工具箱(Parallel Computing Toolbox)和MATLAB分布式计算引擎(MDCE)提供了强大的并行处理能力,使得大规模数据处理和复杂计算任务得以高效解决。本文将详细介绍如…

第十二周:机器学习

目录 摘要 Abstract 一、非监督学习 二、word embedding 三、transformer 1、应用 2、encoder 3、decoder 四、各类attention 1、最常见的类别 2、其余种类 3、小结 总结 摘要 本周继续学习机器学习的相关课程,首先了解了监督学习和非监督学习的概…

记一次docker打包部署历程

1、docker容器的系统信息 $ uname -a Linux runner-nymzs2tf-project-194-concurrent-0tj8jr 5.4.191-1.el7.elrepo.x86_64 #1 SMP Tue Apr 26 12:14:16 EDT 2022 x86_64 Linux $ cat /etc/os-release NAME"**Alpine Linux**" IDalpine VERSION_ID3.9.4 PRETTY_NAME…

Java音视频文件解析工具

文章目录 一 jave-all-deps二 具体用法2.1 添加依赖2.2 视频转音频2.3 视频格式转换2.4 获取视频时长 三 总结 小伙伴们知道,松哥平时录了蛮多视频课程,视频录完以后,就想整理一个视频文档出来,在整理视频文档的时候,就…

Maven-四、继承

Maven进阶 文章目录 Maven进阶前言继承设置继承依赖管理总结 前言 一个项目中的不同模块可能引用的是同一个依赖,在这种情况下,单独在某个模块内引用太麻烦,于是maven使用继承的思想,在父模块中配置依赖包,其他需要这…

数据结构篇--顺序查找【详解】

概念章 查找就是在数据集合中寻找某种条件的数据元素的过程。 查找表是指用于查找同一类型的数据元素集合。 找到了满足条件的数据元素,就是查找成功,否则就是称为查找失败。 关键字是指数据元素的某个数据项的值,可用于标识或者记录&…