真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

golang有抽象類(lèi)嗎

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

成都創(chuàng)新互聯(lián)專(zhuān)注于企業(yè)營(yíng)銷(xiāo)型網(wǎng)站、網(wǎng)站重做改版、江夏網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5網(wǎng)站設(shè)計(jì)、商城網(wǎng)站制作、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性?xún)r(jià)比高,為江夏等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。

golang沒(méi)有抽象類(lèi)。golang并不是面向?qū)ο螅∣OP)語(yǔ)言,沒(méi)有類(lèi)和繼承的概念,也沒(méi)有抽象類(lèi)的概念;但golang中有結(jié)構(gòu)體(struct)和接口(interface),可以通過(guò)struct和interface的組合來(lái)間接實(shí)現(xiàn)面向?qū)ο笳Z(yǔ)言中的抽象類(lèi)。

在 Java 這種面向?qū)ο蟮恼Z(yǔ)言中,抽象類(lèi)和接口是我們經(jīng)常會(huì)運(yùn)用到的 2 種對(duì)抽象概念進(jìn)行定義的機(jī)制。在 golang 中,沒(méi)有類(lèi)和繼承的概念。golang 中有結(jié)構(gòu)體(struct),和面向?qū)ο笳Z(yǔ)言中的類(lèi)相似。golang 中也有接口(interface),接口可以定義一組不含有具體實(shí)現(xiàn)的方法,其提供了一種方式來(lái)說(shuō)明對(duì)象的行為。

然而,在某些情況下,我們需要使用抽象類(lèi)繼承,來(lái)幫助我們寫(xiě)出更優(yōu)雅的代碼??墒窃?golang 中又沒(méi)有抽象類(lèi)的概念,本文將介紹一種通過(guò) struct 和 interface 來(lái)在 golang 中實(shí)現(xiàn)抽象類(lèi)的方法。

Golang中怎么實(shí)現(xiàn)抽象類(lèi)

下面我們會(huì)用 Java 語(yǔ)言作為示例,來(lái)看看如何在面向?qū)ο笳Z(yǔ)言中實(shí)現(xiàn)抽象類(lèi)。接著換 golang 語(yǔ)言,通過(guò) struct 和 interface 來(lái)實(shí)現(xiàn)抽象類(lèi),完成相同的功能。

面向?qū)ο笳Z(yǔ)言中抽象類(lèi)的實(shí)現(xiàn)

假設(shè)我們需要實(shí)現(xiàn)下面這樣的幾個(gè)類(lèi)(使用 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 抽象類(lèi),在此類(lèi)中定義了 public abstract String name(); 一個(gè)抽象方法和 public void play() 這樣一個(gè)公開(kāi)方法。然后我們定義了 Dota 和 LOL 2個(gè)類(lèi)去繼承 Game,并各自實(shí)現(xiàn)了 public String name()。

接下來(lái)讓我們看看如何在 golang 中實(shí)現(xiàn)抽象類(lèi)。

golang 中實(shí)現(xiàn)抽象類(lèi)的方式

  • 定義 interface

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

type IGame interface {
	Name() string
}

  • 定義”父類(lèi)”

然后,我們需要使用 struct 實(shí)現(xiàn)公共方法。

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

這里是重點(diǎn),我們將 game IGame 傳了進(jìn)來(lái)。這樣我們便可以調(diào)用”子類(lèi)”的方法來(lái)獲取名字。從而間接地實(shí)現(xiàn)了在公共方法中調(diào)用不同”子類(lèi)”的實(shí)現(xiàn)的抽象方法。

  • 定義”子類(lèi)”

接著,我們?cè)俣x”Dota”和”LOL”這 2 個(gè) struct 即可。

type Dota struct {
    Game
}
func (d *Dota) Name() string {
	return "Dota"
}
type LOL struct {
    Game
}
func (l *LOL) Name() string {
	return "LOL"
}

  • 大功告成

現(xiàn)在,在初始化”Dota”和”LOL”結(jié)構(gòu)體后,便可以調(diào)用 func (g *Game) play(game IGame) 方法了。

dota := &Dota{}
dota.play(dota)

lol := &LOL{}
lol.play(lol)

// 輸出:
//Dota is awesome!
//LOL is awesome!

以上就是“golang有抽象類(lèi)嗎”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


網(wǎng)頁(yè)標(biāo)題:golang有抽象類(lèi)嗎
本文URL:http://weahome.cn/article/phoicd.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部