浅谈Java中的interface应用与面向接口编程

 更新时间:2023年10月10日 08:49:59   作者:zhangbeizhen18  
这篇文章主要介绍了浅谈Java中的interface应用与面向接口编程,Java的关键字interface应用,一个接口,多个实现类,面向接口编程,把业务逻辑线提取出来作为接口,具体的业务实现通过该接口的实现类来完成,需要的朋友可以参考下

前言

场景:Java的关键字interface应用,一个接口,多个实现类。面向接口编程,把业务逻辑线提取出来作为接口,具体的业务实现通过该接口的实现类来完成。

版本:JDK 1.8。

1.一个Java接口

(1)说明

使用Java关键字interface修饰的类型,就是接口。

接口里面方法一般没有函数体,实际就是抽象方法。

比如:String announceStart();

接口里面方法有函数体情况,一般使用default关键字修饰。

比如:default String holdSportGame() { ...}

(2)代码

public interface SportContest {
  //开场仪式
  String announceStart();
  //举行比赛
  ResultDto playGame();
  //颁奖仪式
  String announceEnd(ResultDto resultDto);
  //举行体育赛事
  default String holdSportGame() {
      String result01 = announceStart();
      ResultDto result02 = playGame();
      String result03 = announceEnd(result02);
      return result03;
  }
}

2.多个实现类实现同一个Java接口

实现Java接口使用implements关键字。

(1)实现类TableTennisContest

public class TableTennisContest implements SportContest {
    //赛事任务
    private TaskDto taskDto = null;
    public TableTennisContest(TaskDto taskDto) {
        this.setTaskDto(taskDto);
    }
    @Override
    public String announceStart() {
        TaskDto taskDto = this.getTaskDto();
        System.out.println("举行乒乓球比赛入场仪式:");
        System.out.println("步骤一: " + taskDto.getEventName() + "队员入场.");
        System.out.println("步骤二: 裁判员、教练员等各就各位.");
        return "乒乓球比赛进行中";
    }
    @Override
    public ResultDto playGame() {
        TaskDto taskDto = this.getTaskDto();
        System.out.println("举行乒乓球比赛: " + taskDto.getContent() + ",选手们在奋力搏击.");
        return ResultDto.builder().teamName("中国乒乓球队").content("女单决赛冠军").build();
    }
    @Override
    public String announceEnd(ResultDto resultDto) {
        System.out.println("举行颁奖仪式: ");
        System.out.println("步骤一: 为" + resultDto.getTeamName() + resultDto.getContent() + "颁发金牌.");
        System.out.println("步骤二: 升中华人民共和国国旗,奏中华人民共和国国歌.");
        return "乒乓球比赛圆满结束";
    }
    public TaskDto getTaskDto() {
        return this.taskDto;
    }
    public void setTaskDto(TaskDto taskDto) {
        this.taskDto = taskDto;
    }
}

(2)实现类SwimmingContest

public class SwimmingContest implements SportContest {
  //赛事任务
  private TaskDto taskDto = null;
  public SwimmingContest(TaskDto taskDto) {
      this.setTaskDto(taskDto);
  }
  @Override
  public String announceStart() {
      TaskDto taskDto = this.getTaskDto();
      System.out.println("举行游泳比赛入场仪式:");
      System.out.println("步骤一: " + taskDto.getEventName() + "队员入场.");
      System.out.println("步骤二: 裁判员、教练员等各就各位.");
      return "游泳比赛进行中";
  }
  @Override
  public ResultDto playGame() {
      TaskDto taskDto = this.getTaskDto();
      System.out.println("举行游泳比赛: " + taskDto.getContent() + ",选手们在冲刺记录.");
      return ResultDto.builder().teamName("中国游泳队").content("男子组200米决赛冠军").build();
  }
  @Override
  public String announceEnd(ResultDto resultDto) {
      System.out.println("举行颁奖仪式: ");
      System.out.println("步骤一: 为" + resultDto.getTeamName() + resultDto.getContent() + "颁发金牌.");
      System.out.println("步骤二: 升中华人民共和国国旗,奏中华人民共和国国歌.");
      return "游泳比赛圆满结束";
  }
  public TaskDto getTaskDto() {
      return this.taskDto;
  }
  public void setTaskDto(TaskDto taskDto) {
      this.taskDto = taskDto;
  }
}

3.示例测试

(1)说明

执行接口函数时,需先创建接口实现类的实例对象。

(2)代码

public class ApplyInterface {
  // 主函数入口
  public static void main(String[] args) {
    System.out.println("*******************************");
    holdSportGame(new TableTennisContest(TaskDto.builder().eventName("乒乓球比赛").content("女单决赛").build()));
    System.out.println("*******************************");
    holdSportGame(new SwimmingContest(TaskDto.builder().eventName("游泳比赛").content("男子200米决赛").build()));
    System.out.println("*******************************");
  }
  // 面向接口编程
  public static void holdSportGame(SportContest sportContest) {
      sportContest.holdSportGame();
  }
}

(3)输出结果

*******************************
举行乒乓球比赛入场仪式:
步骤一: 乒乓球比赛队员入场.
步骤二: 裁判员、教练员等各就各位.
举行乒乓球比赛: 女单决赛,选手们在奋力搏击.
举行颁奖仪式: 
步骤一: 为中国乒乓球队女单决赛冠军颁发金牌.
步骤二: 升中华人民共和国国旗,奏中华人民共和国国歌.
*******************************
举行游泳比赛入场仪式:
步骤一: 游泳比赛队员入场.
步骤二: 裁判员、教练员等各就各位.
举行游泳比赛: 男子200米决赛,选手们在冲刺记录.
举行颁奖仪式: 
步骤一: 为中国游泳队男子组200米决赛冠军颁发金牌.
步骤二: 升中华人民共和国国旗,奏中华人民共和国国歌.
*******************************

4.辅助实体类

(1)说明

在实体类中使用注解@Data等来自lombok-1.18.24.jar。

(2)TaskDto

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class TaskDto implements Serializable {
    //赛事名称
    private String eventName;
    //活动内容
    private String content;
}

(3)ResultDto

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ResultDto implements Serializable {
    //竞赛队伍
    private String teamName;
    //比赛成绩
    private String content;
}

到此这篇关于浅谈Java中的interface应用与面向接口编程的文章就介绍到这了,更多相关Java的interface面向接口编程内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java统计汉字字数的方法示例

    java统计汉字字数的方法示例

    这篇文章主要介绍了java统计汉字字数的方法,结合实例形式分析了java正则判定、字符串遍历及统计相关操作技巧,需要的朋友可以参考下
    2017-05-05
  • Java判断文件或者文件夹是否存在的功能(不存在创建,存在删除)

    Java判断文件或者文件夹是否存在的功能(不存在创建,存在删除)

    在Java中,要判断文件或文件夹是否存在,并根据判断结果来执行创建或删除操作,你可以使用java.io.File类或者java.nio.file包中的类,本文介绍Java判断文件或者文件夹是否存在,不存在创建,存在删除,感兴趣的朋友一起看看吧
    2025-03-03
  • 使用JSCH框架通过跳转机访问其他节点的方法

    使用JSCH框架通过跳转机访问其他节点的方法

    下面小编就为大家分享一篇使用JSCH框架通过跳转机访问其他节点的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • maven依赖冲突加载顺序与解决

    maven依赖冲突加载顺序与解决

    这篇文章主要介绍了项目中同时引用了相同依赖的不同版本,也就是冲突,maven 是如何选择的,了解了有助于解决项目中的依赖问题,需要的朋友可以参考下
    2024-01-01
  • Java确保MQ消息队列不丢失的实现与流程分析

    Java确保MQ消息队列不丢失的实现与流程分析

    在分布式系统中,消息队列是核心组件之一,本文将探讨如何确保MQ消息队列不丢失,并通过Java代码示例和流程图来演示解决方案,需要的可以了解下
    2025-05-05
  • 基于SpringBoot+SpringAI+Ollama开发智能问答系统

    基于SpringBoot+SpringAI+Ollama开发智能问答系统

    在人工智能技术飞速发展的今天,大语言模型(LLM)已成为开发者工具箱中不可或缺的一部分,本文将介绍如何利用SpringBoot、SpringAI框架结合Ollama本地大模型服务,搭建一个完全运行在本地Windows环境下的智能问答系统,有需要的可以了解下
    2025-06-06
  • Java 控制流程、大数值、数组

    Java 控制流程、大数值、数组

    这篇文章主要给大家介绍的是Java 控制流程、大数值、数组的一些相关自来哦,感兴趣的小伙伴可以参考下面文章的具体内容,希望文章对你有所帮助
    2021-10-10
  • SpringBoot项目部署到腾讯云的实现步骤

    SpringBoot项目部署到腾讯云的实现步骤

    本文主要介绍了SpringBoot项目部署到腾讯云的实现步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • 一文搞懂Spring中的JavaConfig

    一文搞懂Spring中的JavaConfig

    这篇文章主要介绍了Spring中的JavaConfig知识,包括事务注解驱动,properties配置文件加载方法,本文给大家介绍的非常详细,需要的朋友可以参考下
    2021-09-09
  • Java毕业设计实战之教室预订管理系统的实现

    Java毕业设计实战之教室预订管理系统的实现

    这是一个使用了java+SpringBoot+Maven+Vue+mysql开发的教室预订管理系统,是一个毕业设计的实战练习,具有教室预订管理该有的所有功能,感兴趣的朋友快来看看吧
    2022-02-02

最新评论