網站首頁 編程語言 正文
多態是什么
相信學過Java這種面向對象語言的同學對于多態來說都不陌生,在代碼執行的時候,能夠根據子類的類型去執行子類當中的方法。多態是指代碼可以根據類型的具體實現采取不同行為的能力。如果一個類型實現了某個接口,所有使用這個接口的地方,都可以支持這種類型的值。
Go語言多態舉例
有這樣一個場景,我們在應用開發中涉及到很多通知事件,通知的類型可以是通過微信、QQ、Email等,那么我們可以抽象出一個接口,定義一個通知的接口,然后微信通知類、QQ通知類、Email通知類分別實現對應的通知方法。
定義一個通知類型:notifier
// 通知者接口 type Notifier interface { // 通知方法,可以由具體的類進行實現 notify() }
定義微信類型、QQ類型、Email類型,并實現notify方法,以指針類型作為方法的接收者
type WechatNotifier struct { ?? ?Name ? ?string ?? ?Message string } func (w *WechatNotifier) notify() { ?? ?fmt.Printf("%v notify %v \n", w.Name, w.Message) } type QQNotifier struct { ?? ?Name ? ?string ?? ?Message string } func (q *QQNotifier) notify() { ?? ?fmt.Printf("%v notify %v \n", q.Name, q.Message) } type EmailNotifier struct { ?? ?Name ? ?string ?? ?Message string } func (e *EmailNotifier) notify() { ?? ?fmt.Printf("%v notify %v \n", e.Name, e.Message) }
定義發送通知方法,入參為Notifier;等需要調用的時候,需要傳入實現了Notifier中的接口的類型
func sendNotify(notifier Notifier) { notifier.notify() }
測試一下
func main() { ?? ?w := &WechatNotifier{ ?? ??? ?Name: ? ?"微信", ?? ??? ?Message: "微信消息", ?? ?} ?? ?q := &QQNotifier{ ?? ??? ?Name: ? ?"QQ", ?? ??? ?Message: "QQ消息", ?? ?} ?? ?e := &EmailNotifier{ ?? ??? ?Name: ? ?"Email", ?? ??? ?Message: "Email消息", ?? ?} ?? ?// 接受微信類型 ?? ?sendNotify(w) ?? ?// 接受QQ類型 ?? ?sendNotify(q) ?? ?// 接受Email類型 ?? ?sendNotify(e) }
測試結果如下:
總結
Golang中主要是采用了接口來實現多態,先定義一個抽象接口,然后再定義具體的實現類并實現接口中的方法,當我們需要定義一個通用的方法時,方法的入參可以接收一個接口類型,這樣在程序設計的時候就可以不必多寫類似的方法從而接受不同的類了,在程序的運行時,就可以動態地把該接口指向的具體類型,從而執行具體類型的方法!
原文鏈接:https://blog.csdn.net/weixin_43395911/article/details/123023919
相關推薦
- 2023-03-20 C#?Path類---文件路徑解讀_C#教程
- 2023-01-20 React?Redux管理庫示例詳解_React
- 2023-03-03 詳解C++?STL模擬實現forward_list_C 語言
- 2023-07-26 webpakc原理之開發一個清除console.log(xxx)的loader
- 2022-03-26 asp.net?core?中優雅的進行響應包裝的實現方法_實用技巧
- 2022-07-10 laravel 中 distinct() 的使用方法與去重
- 2022-08-15 Python利用Selenium實現自動化驗證登錄
- 2022-02-18 解決 Syntax Error: Error: PostCSS received undefined
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支