91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

golang有抽象類嗎

發布時間:2023-01-09 10:31:37 來源:億速云 閱讀:101 作者:iii 欄目:編程語言

今天小編給大家分享一下golang有抽象類嗎的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

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

在 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!

以上就是“golang有抽象類嗎”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

禹州市| 甘洛县| 新丰县| 禄丰县| 临海市| 新乡市| 清远市| 南溪县| 孝感市| 南通市| 彭阳县| 中山市| 桦川县| 新龙县| 宜兴市| 黔江区| 阳原县| 黄梅县| 抚宁县| 莒南县| 兴海县| 曲沃县| 京山县| 阿坝县| 贡觉县| 阿坝| 屏边| 洱源县| 察雅县| 揭东县| 陆丰市| 尤溪县| 扶绥县| 漳浦县| 汪清县| 正镶白旗| 临桂县| 色达县| 抚远县| 扎囊县| 泰和县|