淺談Java中的interface應(yīng)用與面向接口編程
前言
場(chǎng)景:Java的關(guān)鍵字interface應(yīng)用,一個(gè)接口,多個(gè)實(shí)現(xiàn)類。面向接口編程,把業(yè)務(wù)邏輯線提取出來(lái)作為接口,具體的業(yè)務(wù)實(shí)現(xiàn)通過該接口的實(shí)現(xiàn)類來(lái)完成。
版本:JDK 1.8。
1.一個(gè)Java接口
(1)說(shuō)明
使用Java關(guān)鍵字interface修飾的類型,就是接口。
接口里面方法一般沒有函數(shù)體,實(shí)際就是抽象方法。
比如:String announceStart();
接口里面方法有函數(shù)體情況,一般使用default關(guān)鍵字修飾。
比如:default String holdSportGame() { ...}
(2)代碼
public interface SportContest { //開場(chǎng)儀式 String announceStart(); //舉行比賽 ResultDto playGame(); //頒獎(jiǎng)儀式 String announceEnd(ResultDto resultDto); //舉行體育賽事 default String holdSportGame() { String result01 = announceStart(); ResultDto result02 = playGame(); String result03 = announceEnd(result02); return result03; } }
2.多個(gè)實(shí)現(xiàn)類實(shí)現(xiàn)同一個(gè)Java接口
實(shí)現(xiàn)Java接口使用implements關(guān)鍵字。
(1)實(shí)現(xiàn)類TableTennisContest
public class TableTennisContest implements SportContest { //賽事任務(wù) private TaskDto taskDto = null; public TableTennisContest(TaskDto taskDto) { this.setTaskDto(taskDto); } @Override public String announceStart() { TaskDto taskDto = this.getTaskDto(); System.out.println("舉行乒乓球比賽入場(chǎng)儀式:"); System.out.println("步驟一: " + taskDto.getEventName() + "隊(duì)員入場(chǎng)."); System.out.println("步驟二: 裁判員、教練員等各就各位."); return "乒乓球比賽進(jìn)行中"; } @Override public ResultDto playGame() { TaskDto taskDto = this.getTaskDto(); System.out.println("舉行乒乓球比賽: " + taskDto.getContent() + ",選手們?cè)趭^力搏擊."); return ResultDto.builder().teamName("中國(guó)乒乓球隊(duì)").content("女單決賽冠軍").build(); } @Override public String announceEnd(ResultDto resultDto) { System.out.println("舉行頒獎(jiǎng)儀式: "); System.out.println("步驟一: 為" + resultDto.getTeamName() + resultDto.getContent() + "頒發(fā)金牌."); System.out.println("步驟二: 升中華人民共和國(guó)國(guó)旗,奏中華人民共和國(guó)國(guó)歌."); return "乒乓球比賽圓滿結(jié)束"; } public TaskDto getTaskDto() { return this.taskDto; } public void setTaskDto(TaskDto taskDto) { this.taskDto = taskDto; } }
(2)實(shí)現(xiàn)類SwimmingContest
public class SwimmingContest implements SportContest { //賽事任務(wù) private TaskDto taskDto = null; public SwimmingContest(TaskDto taskDto) { this.setTaskDto(taskDto); } @Override public String announceStart() { TaskDto taskDto = this.getTaskDto(); System.out.println("舉行游泳比賽入場(chǎng)儀式:"); System.out.println("步驟一: " + taskDto.getEventName() + "隊(duì)員入場(chǎng)."); System.out.println("步驟二: 裁判員、教練員等各就各位."); return "游泳比賽進(jìn)行中"; } @Override public ResultDto playGame() { TaskDto taskDto = this.getTaskDto(); System.out.println("舉行游泳比賽: " + taskDto.getContent() + ",選手們?cè)跊_刺記錄."); return ResultDto.builder().teamName("中國(guó)游泳隊(duì)").content("男子組200米決賽冠軍").build(); } @Override public String announceEnd(ResultDto resultDto) { System.out.println("舉行頒獎(jiǎng)儀式: "); System.out.println("步驟一: 為" + resultDto.getTeamName() + resultDto.getContent() + "頒發(fā)金牌."); System.out.println("步驟二: 升中華人民共和國(guó)國(guó)旗,奏中華人民共和國(guó)國(guó)歌."); return "游泳比賽圓滿結(jié)束"; } public TaskDto getTaskDto() { return this.taskDto; } public void setTaskDto(TaskDto taskDto) { this.taskDto = taskDto; } }
3.示例測(cè)試
(1)說(shuō)明
執(zhí)行接口函數(shù)時(shí),需先創(chuàng)建接口實(shí)現(xiàn)類的實(shí)例對(duì)象。
(2)代碼
public class ApplyInterface { // 主函數(shù)入口 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)輸出結(jié)果
*******************************
舉行乒乓球比賽入場(chǎng)儀式:
步驟一: 乒乓球比賽隊(duì)員入場(chǎng).
步驟二: 裁判員、教練員等各就各位.
舉行乒乓球比賽: 女單決賽,選手們?cè)趭^力搏擊.
舉行頒獎(jiǎng)儀式:
步驟一: 為中國(guó)乒乓球隊(duì)女單決賽冠軍頒發(fā)金牌.
步驟二: 升中華人民共和國(guó)國(guó)旗,奏中華人民共和國(guó)國(guó)歌.
*******************************
舉行游泳比賽入場(chǎng)儀式:
步驟一: 游泳比賽隊(duì)員入場(chǎng).
步驟二: 裁判員、教練員等各就各位.
舉行游泳比賽: 男子200米決賽,選手們?cè)跊_刺記錄.
舉行頒獎(jiǎng)儀式:
步驟一: 為中國(guó)游泳隊(duì)男子組200米決賽冠軍頒發(fā)金牌.
步驟二: 升中華人民共和國(guó)國(guó)旗,奏中華人民共和國(guó)國(guó)歌.
*******************************
4.輔助實(shí)體類
(1)說(shuō)明
在實(shí)體類中使用注解@Data等來(lái)自lombok-1.18.24.jar。
(2)TaskDto
@Data @Builder @AllArgsConstructor @NoArgsConstructor public class TaskDto implements Serializable { //賽事名稱 private String eventName; //活動(dòng)內(nèi)容 private String content; }
(3)ResultDto
@Data @Builder @AllArgsConstructor @NoArgsConstructor public class ResultDto implements Serializable { //競(jìng)賽隊(duì)伍 private String teamName; //比賽成績(jī) private String content; }
到此這篇關(guān)于淺談Java中的interface應(yīng)用與面向接口編程的文章就介紹到這了,更多相關(guān)Java的interface面向接口編程內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java轉(zhuǎn)樹形結(jié)構(gòu)工具類詳解
這篇文章主要為大家詳細(xì)介紹了java轉(zhuǎn)樹形結(jié)構(gòu)工具類,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-08-08Java中關(guān)于String StringBuffer StringBuilder特性深度解析
這篇文章主要介紹了Java中關(guān)于String StringBuffer StringBuilder特性深度解析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09Mybatis-plus?代碼生成器?AutoGenerator?的簡(jiǎn)介和使用詳解
AutoGenerator是MyBatis-Plus的代碼生成器,通過AutoGenerator可以快速生成?Entity、Mapper、Mapper XML、Service、Controller等各個(gè)模塊的代碼,極大的提升了開發(fā)效率,這篇文章主要介紹了Mybatis-plus代碼生成器AutoGenerator的簡(jiǎn)介和使用,需要的朋友可以參考下2023-05-05springboot /tmp 臨時(shí)目錄的具體實(shí)現(xiàn)
springboot應(yīng)用服務(wù)再啟動(dòng)的時(shí)候,會(huì)在操作系統(tǒng)的/tmp目錄,本文主要介紹了springboot /tmp 臨時(shí)目錄的具體實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-06-06SpringBoot 集成 Kettle的實(shí)現(xiàn)示例
本文主要介紹了SpringBoot 集成 Kettle的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01Java常見基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)
這篇文章主要介紹了Java常見數(shù)據(jù)結(jié)構(gòu)面試題,帶有答案及解釋,希望對(duì)廣大的程序愛好者有所幫助,同時(shí)祝大家有一個(gè)好成績(jī),需要的朋友可以參考下,希望可以幫助到你2021-07-07SpringBoot+Vue靜態(tài)資源刷新后無(wú)法訪問的問題解決方案
這篇文章主要介紹了SpringBoot+Vue靜態(tài)資源刷新后無(wú)法訪問的問題解決方案,文中通過代碼示例和圖文講解的非常詳細(xì),對(duì)大家解決問題有一定的幫助,需要的朋友可以參考下2024-05-05springboot Controller直接返回String類型帶來(lái)的亂碼問題及解決
文章介紹了在Spring Boot中,當(dāng)Controller直接返回String類型時(shí)可能出現(xiàn)的亂碼問題,并提供了解決辦法,通過在`application.yaml`中設(shè)置請(qǐng)求和響應(yīng)的編碼格式,并在自定義配置類中進(jìn)行配置,可以有效解決這一問題2024-11-11