Junior — Middle
Ինչպե՞ս է կոմպիլյատորը որոշում, թե որ կոնկրետ մեթոդը կանչել, երբ կա ծանրաբեռնվածություն կամ վերաշարադրում։
sobes.tech AI
Պատասխան AI-ից
Go լեզվում մեթոդների վերաշարադրություն որպես դասական իմաստով, ինչպես C++ կամ Java, չկա: Ամեն մեթոդ կամ ֆունկցիա ունի յուրահատուկ անուն փաթեթում: Եթե մի քանի ֆունկցիաներ նույն անունով, բայց տարբեր պարամետրերով, դա կբերի կոմպիլյացիայի սխալի:
Ինչ վերաբերում է վերագրելուն, Go-ն օգտագործում է ինտերֆեյսներ: Եթե մի տիպ իրականացնում է ինտերֆեյսի մեթոդները, ապա ինտերֆեյսի միջոցով կանչելիս կկոչվի կոնկրետ տիպի մեթոդը:
Այսպիսով, մեթոդի ընտրությունը կատարվում է կոմպիլյացիայի ժամանակ՝ հիմնվելով ֆունկցիայի անունին և սիգնատուրային, իսկ դինամիկ կանչը՝ ինտերֆեյսի միջոցով, որոշվում է օբյեկտի տիպով՝ գործարկման ժամանակ:
Օրինակ՝
package main
import "fmt"
type Speaker interface {
Speak()
}
type Dog struct{}
func (d Dog) Speak() { fmt.Println("Woof") }
type Cat struct{}
func (c Cat) Speak() { fmt.Println("Meow") }
func main() {
var s Speaker
s = Dog{}
s.Speak() // Տպում է Woof
s = Cat{}
s.Speak() // Տպում է Meow
}