go的匿名組合

golang也提供了繼承機制,但採用組合的文法,所以稱爲匿名組合。與其餘語言不一樣, golang很清晰地展現出類的內存佈局是怎樣的。golang

一  非指針方式的組合函數

 1)基本語法佈局

 

type base struct{
	//成員變量
}

func(b *base) 函數名(參數列表)(返回值列表){
	//函數體
}

//派生類
type derived struct{
	base
	//成員變量
}

func (b *derived) 函數名(參數列表)(返回值列表){
	//函數體
}

 

2)繼承規則spa

 在派生類沒有改寫基類的成員方法時,相應的成員方法被繼承。指針

        派生類能夠直接調用基類的成員方法,譬如基類有個成員方法爲Base.Func(),那麼Derived.Func()等同於Derived.Base.Func()blog

        假若派生類的成員方法名與基類的成員方法名相同,那麼基類方法將被覆蓋或叫隱藏,譬如基類和派生類都有成員方法Func(),那麼Derived.Func()將只能調用派生類的Func()方法,若是要調用基類版本,能夠經過Derived.Base.Func()來調用。繼承

舉例以下:內存

 

package main

import "fmt"

type Base struct{
	//成員變量
}

func(b *Base) Func1(){

	fmt.Println("Base.Func1 was invoked1")

}

func(b *Base) Func2(){

	fmt.Println("Base.Func2 was invoked1")

}

//派生類
type Derived struct{
	Base
	//成員變量
}

func (d *Derived) Func2(){
	fmt.Println("Derived.Func2() was invoked!")
}


func (d *Derived) Func3(){
	fmt.Println("Derived.Func3() was invoked!")
}

func main(){
	d:=&Derived{}
	d.Func1()
	d.Base.Func1()
	d.Func2()
	d.Base.Func2()
	d.Func3()
}

 

 

二  指針組合模式class

基本語法:import

/ 基類
type Base struct {
    // 成員變量
}

func (b *Base) 函數名(參數列表) (返回值列表) {
    // 函數體
}

// 派生類
type Derived struct {
    *Base
    // 成員變量
}

func (b *Derived) 函數名(參數列表) (返回值列表) {
    // 函數體
}
相關文章
相關標籤/搜索