站長資訊網
最全最豐富的資訊網站

golang是否有抽象類

golang沒有抽象類。golang并不是面向對象(OOP)語言,沒有類和繼承的概念,也沒有抽象類的概念;但golang中有結構體(struct)和接口(interface),可以通過struct和interface的組合來間接實現面向對象語言中的抽象類。

golang是否有抽象類

本教程操作環境:windows7系統、GO 1.18版本、Dell G3電腦。

在 Java 這種面向對象的語言中,抽象類和接口是我們經常會運用到的 2 種對抽象概念進行定義的機制。在 golang 中,沒有類和繼承的概念。golang 中有結構體(struct),和面向對象語言中的類相似。golang 中也有接口(interface),接口可以定義一組不含有具體實現的方法,其提供了一種方式來說明對象的行為。

然而,在某些情況下,我們需要使用抽象類繼承,來幫助我們寫出更優雅的代碼。可是在 golang 中又沒有抽象類的概念,本文將介紹一種通過 struct 和 interface 來在 golang 中實現抽象類的方法。

Golang中怎么實現抽象類

下面我們會用 Java 語言作為示例,來看看如何在面向對象語言中實現抽象類。接著換 golang 語言,通過 struct 和 interface 來實現抽象類,完成相同的功能。

面向對象語言中抽象類的實現

假設我們需要實現下面這樣的幾個類(使用 Java 為例):

public abstract class Game {     public void play()     {         System.out.println(this.name() + " is awesome!");     }     public abstract String name(); } public class Dota extends Game {     public String name()     {         return "Dota";     } } public class LOL extends Game {     public String name()     {         return "LOL";     } }
登錄后復制

我們定義了 Game 抽象類,在此類中定義了 public abstract String name(); 一個抽象方法和 public void play() 這樣一個公開方法。然后我們定義了 Dota 和 LOL 2個類去繼承 Game,并各自實現了 public String name()。

接下來讓我們看看如何在 golang 中實現抽象類。

golang 中實現抽象類的方式

  • 定義 interface

首先,我們需要將抽象方法定義在 interface 中。

type IGame interface { 	Name() string }
登錄后復制

  • 定義”父類”

然后,我們需要使用 struct 實現公共方法。

type Game struct {} func (g *Game) play(game IGame) { 	fmt.Printf(fmt.Sprintf("%s is awesome!", game.Name())) }
登錄后復制

這里是重點,我們將 game IGame 傳了進來。這樣我們便可以調用”子類”的方法來獲取名字。從而間接地實現了在公共方法中調用不同”子類”的實現的抽象方法。

  • 定義”子類”

接著,我們再定義”Dota”和”LOL”這 2 個 struct 即可。

type Dota struct {     Game } func (d *Dota) Name() string { 	return "Dota" } type LOL struct {     Game } func (l *LOL) Name() string { 	return "LOL" }
登錄后復制

  • 大功告成

現在,在初始化”Dota”和”LOL”結構體后,便可以調用 func (g *Game) play(game IGame) 方法了。

dota := &Dota{} dota.play(dota)  lol := &LOL{} lol.play(lol)  // 輸出: //Dota is awesome! //LOL is awesome!
登錄后復制

總結

本文通過 struct 和 interface 的組合,提供了一種思路,間接實現了面向對象語言中的抽象類繼承的模式。

贊(0)
分享到: 更多 (0)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久夜色精品国产亚洲av| 亚洲av综合日韩| 91精品成人免费国产片| 久久国产精品久久精| 中文字幕无码久久精品青草| 亚洲国产成人精品女人久久久 | 日韩AV无码精品人妻系列| 国产精品爽爽影院在线| 人妻熟妇乱又伦精品视频APP| 国产福利在线观看精品| 久久久久久久精品妇女99| 99j久久精品久久久久久| 99久久亚洲综合精品成人网| 久久久精品波多野结衣AV| 国产suv精品一区二区33| 国产精品久久久久国产A级| 麻豆精品久久久一区二区| 国产精品视频一区二区三区四| 国内精品91最新在线观看| 精品亚洲综合在线第一区| 九九热在线精品视频| 国产精品va无码一区二区| 国产精品偷伦视频观看免费| 久久se精品一区二区| 亚洲高清专区日韩精品| 久久久久久国产精品视频| 亚洲自偷自偷精品| 久久精品国产亚洲av高清漫画| 精品无码人妻一区二区免费蜜桃| 88国产精品视频一区二区三区| 91精品国产福利在线观看| 国产精品久久久久久福利69堂| 色噜噜精品视频在线观看| 少妇人妻偷人精品无码AV| 国产精品videossexohd| 精品久久伦理中文字幕| 国产av一区二区精品久久凹凸| 日韩精品区一区二区三VR| freesexvideos精品老师毛多| 久久亚洲国产精品123区| 精品国内片67194|