4.23.4 overriding

4.23.4 overriding

در زبان گو مثل سایر زبان های شی گرا امکان overriding مستقیم یک متد وجود ندارد اما در عوض شما می توانید با استفاده از type embedding و پیاده سازی متد یک اینترفیس این تکنیک را انجام دهید و به متدی که override انجام داده Shadow Method می گویند.

به مثال زیر توجه کنید :

 1package main
 2
 3import "fmt"
 4
 5type User interface {
 6	PrintName()
 7}
 8
 9type Person struct {
10	Name string
11}
12
13func (p Person) PrintName() {
14	fmt.Println("My name is", p.Name)
15}
16
17type Student struct {
18	Person
19}
20
21func (s Student) PrintName() {
22	fmt.Println("I am a student and my name is", s.Name)
23}
24
25func main() {
26	p := Person{Name: "John"}
27	s := Student{Person{Name: "Jane"}}
28
29	p.PrintName()
30	s.PrintName()
31}
1$ go run main.go
2My name is John
3I am a student and my name is Jane

در کد فوق ما یک اینترفیس User داریم که داخلش یک متد PrintName وجود دارد که این متد نام شخص یا دانش آموز را به همراه توضیحات چاپ می کند. حال ۲ تا ساختار داریم Person و Student که ساختار student فقط Person را جاسازی کرده است. سپس برای این ۲ ساختار متد PrintName را پیاده سازی کردیم با این تفاوت که داخل متد PrintName ساختار Student متن دیگری قرار دادیم. در تابع main ما متغیر p, s را از نوع Person و Student ایجاد و مقدار دهی کردیم. سپس متد PrintName هر دو را فراخوانی کردیم.