Go では、メソッドのオーバーライドにより、同じメソッド シグネチャを維持しながら、基本クラスのメソッドを派生クラスで再定義できます。override キーワードを使用します。オーバーライドされたメソッドは、基本メソッドと同じシグネチャを持つ必要があります。オーバーライドされたメソッドのレシーバー型は、基本型のサブタイプである必要があります。
Go での関数のオーバーライド
オーバーライドを使用すると、メソッドの署名を保持しながら、派生クラスで既存のメソッドの新しい実装を定義できます。これにより、インターフェイスを変更せずに基本クラスの機能を拡張できます。
構文
Go でのオーバーライドでは、override
キーワードを使用します。
type MyStruct struct { baseStruct } func (m MyStruct) SomeMethod() {}
SomeMethod
メソッドはオーバーライドされます。 baseStruct
の同じ名前のメソッド。
注:
実際的なケース
Speak
メソッドを備えた Animal
基本クラスがあるとします:
type Animal struct { name string } func (a Animal) Speak() { fmt.Printf("%s speaks!\n", a.name) }
Speak
メソッドを拡張して吠える Dog
派生クラスを作成できます。
type Dog struct { Animal } func (d Dog) Speak() { fmt.Printf("%s barks!\n", d.name) }
Here, Dog.Speak
メソッドAnimal.Speak
メソッドをオーバーライドして、Dog 固有の実装を提供します。
例
package main import "fmt" type Animal struct { name string } func (a Animal) Speak() { fmt.Printf("%s speaks!\n", a.name) } type Dog struct { Animal } func (d Dog) Speak() { fmt.Printf("%s barks!\n", d.name) } func main() { a := Animal{name: "Animal"} a.Speak() // Output: Animal speaks! d := Dog{Animal{name: "Dog"}} d.Speak() // Output: Dog barks! }
以上がgolangで関数を書き直すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。