Rumah > Artikel > pembangunan bahagian belakang > Bagaimanakah Penggantian Kaedah Boleh Dicapai dalam Go Menggunakan Antara Muka?
Kaedah Overriding dalam Go dengan Antara Muka
Tidak seperti Java, di mana kaedah overriding melibatkan pewarisan dan pengubahsuaian pelaksanaan kelas asas, Go menawarkan penyelesaian menggunakan antara muka.
Antara muka mentakrifkan satu set tandatangan kaedah yang mesti dilaksanakan oleh sesuatu jenis. Dengan mencipta antara muka dengan kaedah yang sepadan dengan gelagat yang diingini, anda boleh melaksanakannya dalam jenis baharu yang boleh digunakan sebagai ganti yang asal.
Untuk mencapai ini, pertimbangkan contoh berikut:
type Base struct{} func (base *Base) Get() string { return "base" } func (base *Base) GetName() string { return base.Get() }
Untuk melaksanakan penggantian kaedah, buat antara muka:
type Getter interface { Get() string }
Ubah suai jenis Asas untuk membenamkan antara muka Getter:
type Base struct { Getter }
Sekarang, buat jenis baharu yang membenamkan Base dan melaksanakan kaedah Get:
type Sub struct { Base } func (sub *Sub) Get() string { return "Sub" }
Akhir sekali, ubah suai kaedah GetName dalam Base untuk menggunakan antara muka Getter:
func (base *Base) GetName() string { if g, ok := base.Getter.(Getter); ok { return g.Get() } else { return base.Get() } }
Pendekatan ini membolehkan anda mengekalkan pengguna sedia ada Base sambil menyediakan keupayaan untuk mengatasi kaedah Dapatkan dalam subkelas.
Sebagai alternatif, anda juga boleh menggunakan kaedah berikut:
func New() *Sub { userType := &Sub{} userType.Getter = interface{}(userType).(Getter) return userType }
Dalam kes ini, anda mesti menetapkan medan Getter secara manual dalam kod pengguna untuk membolehkan kaedah mengatasi. Kedua-dua kaedah mencapai hasil yang diingini, tetapi pendekatan pertama dianggap lebih idiomatik dalam Go.
Atas ialah kandungan terperinci Bagaimanakah Penggantian Kaedah Boleh Dicapai dalam Go Menggunakan Antara Muka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!