亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > Golang的繼承模擬實例

Golang的繼承模擬實例

熱門標簽:電腦外呼系統輻射大嗎 開通400電話申請流程 上海企業外呼系統排名 揚州電銷外呼系統軟件 如何利用高德地圖標注家 400手機電話免費辦理 武漢百應人工智能電銷機器人 智能語音電銷的機器人 百度地圖標注位置網站

1.前言

面向對象編程的三大特性:封裝、繼承、多態。可見繼承是面向對象程序設計中一個重要的概念。Go 作為面向對象的編程語言,自然也支持繼承。

比較特殊的是 Go 實現繼承的方式與其他傳統 OOP 語言所有不同,不像 C++ 有專門的繼承語法,或者像 Java 中有專門的關鍵字 extends。

C++ 的繼承:

// 基類
class Animal {
public:
    void eat(); 
	void sleep();
};


// 子類
class Dog : public Animal {
public:
    void bark();
};

Java 的繼承:

// 基類
public class Animal {
	public void eat(){};
	public void sleep(){};
}
// 子類
public class Dog extends Animal {
	public void bark(){};
}

2.嵌入式繼承機制

Go 使用匿名嵌套實現繼承。

我們用很容易理解的動物-貓來舉例子。

type Animal struct {
	Name string
}
func (a *Animal) Eat() {
	fmt.Printf("%v is eating", a.Name)
	fmt.Println()
}
type Cat struct {
	Animal
}
cat := Cat{
	Animal: Animal{
		Name: "cat",
	},
}
cat.Eat() // cat is eating

首先,我們實現了一個 Animal 的結構體,代表動物類。并聲明了 Name 字段,用于描述動物的名字。

然后,實現了一個以 Animal 為 receiver 的 Eat 方法,來描述動物進食的行為。

最后,聲明了一個 Cat 結構體,組合了 Cat 字段。再實例化一個貓,調用Eat方法,可以看到會正常的輸出。

可以看到,Cat 結構體本身沒有 Name 字段,也沒有去實現 Eat() 方法。唯一有的就是匿名嵌套的方式繼承了 Animal 父類,至此,我們證明了 Go 通過匿名嵌套的方式實現了繼承。

上面是嵌入類型實例,同樣地也可以嵌入類型指針。

type Cat struct {
	*Animal
}
cat := Cat{
	Animal: Animal{
		Name: "cat",
	},
}

3.嵌入式繼承機制的的局限

相比于 C++ 和 Java, Go 的繼承機制的作用是非常有限的,因為沒有抽象方法,有很多的設計方案可以在 C++ 和 Java 中輕松實現,但是 Go 的繼承卻不能完成同樣的工作。

package main
import "fmt"
// Animal 動物基類
type Animal struct {
	name string
}
func (a *Animal) Play() {
	fmt.Println(a.Speak())
}
func (a *Animal) Speak() string {
	return fmt.Sprintf("my name is %v", a.name)
}
func (a *Animal) Name() string {
	return a.name
}
// Dog 子類狗
type Dog struct {
	Animal
	Gender string
}
func (d *Dog) Speak() string {
	return fmt.Sprintf("%v and my gender is %v", d.Animal.Speak(), d.Gender)
}
func main() {
	d := Dog{
		Animal: Animal{name: "Hachiko"},
		Gender:  "male",
	}
	fmt.Println(d.Name())
	fmt.Println(d.Speak())
	d.Play() // Play() 中調用的是基類 Animal.Speak() 方法,而不是 Dog.Speak()
}

運行輸出:

Hachiko
my name is Hachiko and my gender is male
my name is Hachiko

上面的例子中,Dog 類型重寫了 Speak() 方法。然而如果父類型 Animal 有另外一個方法 Play() 調用 Speak() 方法,但是 Dog 沒有重寫 Play() 的時候,Dog 類型的 Speak() 方法則不會被調用,因為 Speak() 方法不是抽象方法,此時繼承無法實現多態。

4.使用接口封裝方法

為了解決上面的問題,我們應該使用接口封裝方法,通過實現接口方法來實現多態。

package main
import (
    "fmt"
)
type Animal interface {
    Name() string
    Speak() string
    Play()
}
type Dog struct {
    name string
    gender string
}
func (d *Dog) Play() {
    fmt.Println(d.Speak())
}
func (d *Dog) Speak() string {
    return fmt.Sprintf("my name is %v and my gender is %v", d.name, d.gender)
}
func (d *Dog) Name() string {
    return d.name
}
func Play(a Animal) {
    a.Play()
}
func main() {
    d :=Dog{"Hachiko", "male"}
    fmt.Println(d.Name())
    fmt.Println(d.Speak())
    Play(d)
}

運行輸出:

Hachiko
my name is Hachiko and my gender is male
my name is Hachiko and my gender is male

注意:Go 中某個類型需要實現接口中的所有方法才算作實現了接口。

5.小結

如果一個 struct 嵌套了另一個匿名結構體,那么這個結構可以直接訪問匿名結構體的屬性和方法,從而實現繼承。

如果一個 struct 嵌套了另一個有名的結構體,那么這個模式叫做組合。

如果一個 struct 嵌套了多個匿名結構體,那么這個結構可以直接訪問多個匿名結構體的屬性和方法,從而實現多重繼承。

本篇文章就到這里了,希望能幫助到你,也希望您能多多關注腳本之家的更多內容!

您可能感興趣的文章:
  • Django繼承自帶user表并重寫的例子
  • Go語言中nil判斷引起的問題詳析
  • 分析Go語言中CSP并發模型與Goroutine的基本使用
  • Go遍歷struct,map,slice的實現
  • Go 容器遍歷的實現示例

標簽:嘉峪關 宜賓 新余 延邊 武漢 黑龍江 江西 張掖

巨人網絡通訊聲明:本文標題《Golang的繼承模擬實例》,本文關鍵詞  Golang,的,繼承,模擬,實例,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Golang的繼承模擬實例》相關的同類信息!
  • 本頁收集關于Golang的繼承模擬實例的相關信息資訊供網民參考!
  • 推薦文章
    亚洲精品中文一区不卡| 日本免费看视频| 欧美日本国产| 色综合久久久久综合体桃花网| 午夜家庭影院| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 国产不卡在线观看| 欧美一级视| 欧美另类videosbestsex| 欧美日本国产| 99热精品在线| 亚州视频一区二区| 久久99中文字幕| 国产高清视频免费观看| 日韩中文字幕一区二区不卡| 日韩一级黄色大片| 精品视频在线观看视频免费视频 | 日本特黄一级| 成人a大片在线观看| 国产视频久久久久| 欧美日本国产| 精品视频在线观看视频免费视频 | 韩国毛片免费大片| 在线观看成人网| 高清一级做a爱过程不卡视频| 欧美另类videosbestsex久久| 精品在线视频播放| 国产国产人免费视频成69堂| 九九免费高清在线观看视频| 一级毛片看真人在线视频| 成人免费网站视频ww| 亚洲www美色| 日韩综合| 精品视频在线观看一区二区三区| 国产一区二区精品| 999精品影视在线观看| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 精品久久久久久中文| 成人影视在线播放| 精品视频在线观看视频免费视频 | 中文字幕一区二区三区 精品| 天天做人人爱夜夜爽2020毛片| 国产一级生活片| 韩国三级香港三级日本三级| 日韩av成人| 久久国产精品只做精品| 欧美另类videosbestsex| 999久久久免费精品国产牛牛| 毛片的网站| 国产美女在线观看| 青青久久精品国产免费看| 久久精品店| 日韩一级黄色大片| 麻豆午夜视频| 亚洲第一视频在线播放| 精品国产一区二区三区久久久狼| 欧美a级v片不卡在线观看| 亚洲www美色| 精品视频在线观看视频免费视频 | 免费一级片网站| 成人av在线播放| 免费一级片网站| 亚欧成人乱码一区二区| 国产伦精品一区三区视频| 尤物视频网站在线观看| 精品国产一区二区三区久久久蜜臀| 精品国产一区二区三区久久久蜜臀| 91麻豆精品国产自产在线 | 成人免费观看视频| 欧美激情一区二区三区视频高清| 久久精品欧美一区二区| 日韩av成人| 青青久久精品国产免费看| 欧美激情一区二区三区在线播放| 日本在线www| 国产国产人免费视频成69堂| 精品国产香蕉在线播出| 欧美日本国产| 国产91精品一区| 国产a免费观看| 精品视频免费在线| 欧美激情伊人| 日韩中文字幕一区二区不卡| 99久久精品国产免费| 九九干| 美女免费毛片| 天天色成人| 欧美a级片免费看| 99色吧| 国产视频一区二区三区四区| 国产视频在线免费观看| 亚洲精品久久玖玖玖玖| 亚飞与亚基在线观看| 精品视频在线观看免费| 青青久久精品国产免费看| 欧美另类videosbestsex视频 | 一级女性全黄生活片免费 | 成人免费观看的视频黄页| 高清一级做a爱过程不卡视频| 尤物视频网站在线观看| 欧美爱色| 欧美另类videosbestsex视频 | 亚欧乱色一区二区三区| 色综合久久天天综合绕观看| 美女免费毛片| 午夜欧美成人香蕉剧场| 色综合久久久久综合体桃花网| 欧美日本免费| 精品国产亚洲人成在线| 国产精品免费久久| 国产视频久久久久| 国产国产人免费视频成69堂| 精品在线视频播放| 一级毛片视频免费| 精品视频免费观看| 欧美激情伊人| 精品毛片视频| 欧美激情中文字幕一区二区| 天天色成人| 亚飞与亚基在线观看| 97视频免费在线观看| 欧美激情中文字幕一区二区| 国产不卡在线看| 精品视频在线观看免费| 欧美国产日韩在线| 久久国产精品永久免费网站| 国产伦精品一区二区三区无广告 | 精品国产香蕉在线播出| 一级毛片视频免费| 国产精品12| 天堂网中文在线| 久久久久久久网| 日韩欧美一及在线播放| a级精品九九九大片免费看| 香蕉视频一级| 精品国产亚洲人成在线| 亚洲精品中文一区不卡| 国产亚洲精品aaa大片| 色综合久久天天综合| 91麻豆精品国产自产在线 | 成人免费观看视频| 99久久精品国产国产毛片 | 久久久久久久网| 精品在线观看一区| 免费的黄色小视频| 国产一区二区精品在线观看| 国产高清视频免费观看| 亚欧乱色一区二区三区| 欧美a级v片不卡在线观看| 可以免费看污视频的网站| 精品国产香蕉在线播出| 你懂的福利视频| 久久国产精品永久免费网站| 免费一级片网站| 97视频免费在线观看| 国产福利免费视频| 99久久网站| 99色视频在线| 免费一级片网站| 成人高清视频免费观看| 亚洲精品久久玖玖玖玖| 黄视频网站在线免费观看| 国产综合91天堂亚洲国产| 国产视频久久久久| 国产国语在线播放视频| 国产91丝袜高跟系列| 高清一级片| 欧美一区二区三区性| 欧美a级片免费看| a级毛片免费全部播放| 亚欧乱色一区二区三区| 黄色免费三级| 精品久久久久久中文| 久久国产一区二区| 黄视频网站在线观看| 国产成人精品一区二区视频| 国产高清在线精品一区二区| 可以免费看污视频的网站| 成人免费观看的视频黄页| 亚欧乱色一区二区三区| 日韩欧美一及在线播放| 深夜做爰性大片中文| 国产一区精品| 天堂网中文在线| 午夜欧美成人香蕉剧场| 久久国产精品自由自在| 欧美1区| 九九精品影院| 国产一区二区精品| 成人免费网站视频ww| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 精品视频一区二区三区免费| 久久国产精品只做精品| 精品视频在线看 | 久久久久久久免费视频| 精品久久久久久中文| 欧美a级v片不卡在线观看| 成人av在线播放| 国产成人精品综合在线| 999久久久免费精品国产牛牛|