4.23.4 overriding

4.23.4 overriding

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

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

package main

import "fmt"

type User interface {
	PrintName()
}

type Person struct {
	Name string
}

func (p Person) PrintName() {
	fmt.Println("My name is", p.Name)
}

type Student struct {
	Person
}

func (s Student) PrintName() {
	fmt.Println("I am a student and my name is", s.Name)
}

func main() {
	p := Person{Name: "John"}
	s := Student{Person{Name: "Jane"}}

	p.PrintName()
	s.PrintName()
}

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