Rumah >pembangunan bahagian belakang >Golang >Adakah Jenis Alias dalam Go Mewarisi Kaedah daripada Jenis Dasarnya?
Jenis Alias dan Pewarisan Kaedah
Pertimbangkan coretan kod 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 ini menunjukkan cara yang berbeza untuk mencipta jenis alias dan kesannya pada kaedah warisan.
Type Alias vs. Type Definition
Dalam Go, terdapat dua jenis jenis pengisytiharan: alias dan takrifan.
Pewarisan Kaedah dengan Alias Jenis
Jenis alias durWithMethods mencipta jenis baharu yang mewarisi kaedah daripada asasnya jenis, dur, yang seterusnya membenamkan masa. Tempoh. Oleh itu, durWithMethods mempunyai akses kepada kaedah String() dari masa.Duration.
fmt.Println(d.String()) // works
Sebaliknya, jenis alias durWithoutMethods hanya menukar nama masa.Duration. Sejak masa. Tempoh adalah jenis mentah, ia tidak mempunyai kaedah. Oleh itu, durWithoutMethods tidak mempunyai kaedah String().
fmt.Println(dWM.String()) // doesn't compile
Taip Alias dengan Jenis Asas Yang Sama
Alias jenis benar, yang hanya menamakan semula jenis sedia ada , akan kelihatan seperti ini:
type sameAsDuration = time.Duration
Dalam kes ini, sameAsDuration mempunyai kaedah yang sama sebagai masa.Tempoh kerana ia mewakili jenis yang sama.
var sad sameAsDuration fmt.Println(sad.String()) // works
Oleh itu, kekeliruan timbul disebabkan oleh perbezaan halus antara alias jenis dan definisi jenis, dan kesannya terhadap pewarisan kaedah. Alias jenis mengekalkan kaedah jenis asasnya, manakala definisi jenis mencipta jenis baharu dengan set kaedahnya sendiri.
Atas ialah kandungan terperinci Adakah Jenis Alias dalam Go Mewarisi Kaedah daripada Jenis Dasarnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!