How to realize "Virtual Inheritance" in go?
go lang compiler version: "1.3.1 windows/amd64", does it support "Virtual Inheritance" for go lang?
I never heard a C like language could support "Virtual",so I really misunderstand.
How to realize "Virtual Inheritance" in go?
go lang compiler version: "1.3.1 windows/amd64", does it support "Virtual Inheritance" for go lang?
I never heard a C like language could support "Virtual",so I really misunderstand.
Virtual Inheritance solves a problem which does not exist if you don't have multiple inheritance. Consider the following inheritance tree:
A
/ \
B C
\ /
D
If classes B and C both provide a data-member (or method for that matter) with the same name then when accessing said member in D, you need a way to disambiguate whose ancestor's data-member (or method) you wish to access.
Virtual Inheritance is C++'s solution.
In Go you don't have inheritance to begin with; only composition and you can embed at most 1 member of any given type at once.
http://play.golang.org/p/1iYzdoFqIC
package main
type B struct {
}
func (b B) Foo() {}
type C struct {
}
func (c C) Foo() {}
type D struct {
B
C
}
func main() {
d := D{B{}, C{}}
// d.Foo() // <- ambiguous
d.B.Foo() // <- ok
d.C.Foo() // <- ok
}