go语言其实并不像其他编程语言一样支持多态,go语言的多态,其实是一种“假多态”。
样例代码:
package main
import (
"fmt"
)
type Code string
type Programmer interface {
WriteHelloWorld() Code
}
type GoProgrammer struct {
}
type JavaProgrammer struct {
}
func (g *GoProgrammer) WriteHelloWorld() Code {
return "fmt.Println(\"Hello World\")"
}
func (j *JavaProgrammer) WriteHelloWorld() Code {
return "System.out.Println(\"Hello World\")"
}
func writeFirstProgram(p Programmer) {
fmt.Printf("%T %v \n", p, p.WriteHelloWorld())
}
func main() {
gPro := new(GoProgrammer)
jPro := new(JavaProgrammer)
writeFirstProgram(gPro)
writeFirstProgram(jPro)
}
输出
*main.GoProgrammer fmt.Println("Hello World")
*main.JavaProgrammer System.out.Println("Hello World")