Go でのメソッドのオーバーロード: 埋め込み型メソッドへのアクセス
Go で構造体を操作する場合、親と構造体の両方でメソッドを定義できます。埋め込まれた (ネストされた) 構造体。ただし、子構造体でメソッドがオーバーロードされている場合、基本構造体のメソッドに直接アクセスすることは不可能に思えるかもしれません。
メソッドのオーバーロードによるメソッドのオーバーライド
この例では、 Employee 構造体には Human 構造体が埋め込まれます。どちらの構造体も SayHi() メソッドを定義します。ただし、Employee 構造体の SayHi() メソッドは、Human 構造体の SayHi() メソッドをオーバーライドします。
埋め込み型メソッドへのアクセス
オーバーロードされたメソッドにもかかわらず、埋め込み型構造体のメソッドにアクセスするにはでは、次の構文を使用できます:
parentMember.embeddedMemberName.methodName()
この場合、Employee 構造体から Human 構造体の SayHi() メソッドを呼び出すには、次の構文を使用します:
sam.Human.SayHi()
コード例
次の例は、埋め込み構造体のメソッドへのアクセスを示しています。
package main import "fmt" type Human struct { name string age int phone string } func (h *Human) SayHi() { fmt.Printf("Hi, I am %s you can call me on %s\n", h.name, h.phone) } type Employee struct { Human company string } func (e *Employee) SayHi() { fmt.Printf("Hi, I am %s, I work at %s. Call me on %s\n", e.name, e.company, e.phone) } func main() { sam := Employee{Human{"Sam", 45, "111-888-XXXX"}, "Golang Inc"} sam.SayHi() // calls Employee.SayHi() sam.Human.SayHi() // calls Human.SayHi() }
出力:
Hi, I am Sam, I work at Golang Inc. Call me on 111-888-XXXX Hi, I am Sam you can call me on 111-888-XXXX
これは、次のことを示しています。メソッドが子構造体でオーバーロードされている場合でも、上記の構文を使用して埋め込み型のメソッドにアクセスできます。
以上が子構造体でオーバーロードされている場合、Go で埋め込み型のメソッドにアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。