package main
import "fmt"
type IInfo interface {
GetName() string
GetInfo() string
}
type a struct {
Name string
}
func (this *a) GetName() string {
return "a is " + this.Name
}
func (this *a) GetInfo() string {
return this.GetName()
}
type b struct {
a
}
// 重寫一下該方法
func (this *b) GetName() string {
return "b is " + this.Name
}
func main() {
a := a{Name: "dog"}
fmt.Printf("a.GetName: %s\n", a.GetName())
fmt.Printf("a.GetInfo: %s\n", a.GetInfo())
b := b{a}
//輸出 b.GetName: b is dog,說明是呼叫了重寫后的方法
fmt.Printf("b.GetName: %s\n", b.GetName())
//輸出 b.GetInfo: a is dog,說明是呼叫的是a的方法,希望得到的結果是呼叫重寫后的方法
fmt.Printf("b.GetInfo: %s\n", b.GetInfo())
}
uj5u.com熱心網友回復:
什么意思?你GetInfo方法只在a里定義了,b里又沒有定義,當然是呼叫a里的GetInfo方法了,你在b里重寫一下不就行了。uj5u.com熱心網友回復:
簡單地說a 是基礎類,實作了兩個方法
現在基于a(繼承)實作一個b類,b類只有一個方法與a不一樣,所以只需要把這個不一樣的方法重寫一下(overide)
如果在 b 中把所有方法重寫一遍,那就是不繼承,是完全重寫了
物件編程都是這么玩的嘛
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/268820.html
標籤:go語言
