Memahami Kesan Jenis Alias pada Pewarisan Kaedah
Taip alias, aspek biasa bahasa pengaturcaraan seperti Go, menyediakan cara yang mudah untuk buat pengecam baharu untuk jenis sedia ada. Walau bagaimanapun, tingkah laku mereka dari segi pewarisan kaedah boleh mengelirukan.
Pertimbangkan kod Go berikut:
package main import ( "fmt" "time" ) type dur struct { time.Duration } type durWithMethods dur type durWithoutMethods time.Duration func main() { var d durWithMethods // works ?? fmt.Println(d.String()) var dWM durWithoutMethods fmt.Println(dWM.String()) // doesn't compile }
Kod tersebut mengisytiharkan tiga jenis: dur, durWithMethods dan durWithoutMethods. Jenis dur ialah masa pemasukan struct.Duration. Jenis durWithMethods ditakrifkan sebagai alias untuk dur. Taip durWithoutMethods, sebaliknya, adalah alias untuk masa.Duration.
Timbul persoalan mengapa durWithMethods mewarisi kaedah String() dari masa.Duration manakala durWithoutMethods tidak.
Jenis Pengisytiharan dan Pewarisan Kaedah
Dalam Go, pengisytiharan taip terbahagi kepada dua kategori: takrif taip dan alias taip.
Dalam kes ini, dur ialah definisi jenis manakala kedua-duanya durWithMethods dan durWithoutMethods ialah alias jenis.
Kesan pada Pewarisan Kaedah
Apabila jenis baharu dicipta menggunakan definisi jenis, seperti dur, ia kehilangan semua kaedah yang diwarisi. Ini bermakna dur tidak mempunyai kaedah String() masa. Tempoh. Walau bagaimanapun, apabila jenis baharu dibuat menggunakan alias jenis, seperti durWithMethods, ia mewarisi semua kaedah jenis asas, dalam kes ini dur.
Masa. Tempoh dan Jenis Mentah
masa. Tempoh adalah jenis mentah, bermakna ia tidak boleh mempunyai kaedah. Walau bagaimanapun, ia boleh dibenamkan dalam struct seperti dur, yang membenarkan struct untuk mewarisi kaedahnya.
Taip Alias lwn. Alias Langsung
durWithoutMethods ialah alias langsung masa.Tempoh. Tingkah laku pelucutan jenis ini adalah unik untuk alias langsung dan tidak digunakan untuk menaip alias seperti durWithMethods.
Kesimpulannya, manakala durWithMethods mewarisi masa. Kaedah String() Duration kerana ia merupakan alias untuk jenis yang membenamkan masa .Tempoh, durWithoutMethods tidak mewarisi kaedah ini kerana ia adalah alias langsung daripada jenis mentah.
Atas ialah kandungan terperinci Mengapa jenis alias mewarisi kaedah daripada jenis terbenam tetapi bukan daripada jenis mentah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!