go语言学习笔记——面向对象“多态”

160 阅读1分钟

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")