github.com/nibnait/go-learn@v0.0.0-20220227013611-dfa47ea6d2da/src/test/chapter/ch2/18_polymorphism_test.go (about)

     1  package ch2
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  )
     7  
     8  type Code string
     9  type Programmer interface {
    10  	writeHelloWorld() Code
    11  }
    12  
    13  type GoProgrammer struct {
    14  }
    15  
    16  func (p *GoProgrammer) writeHelloWorld() Code {
    17  	return "fmt.Println(\"Hello World!\")"
    18  }
    19  
    20  type JavaProgrammer struct {
    21  }
    22  
    23  func (p *JavaProgrammer) writeHelloWorld() Code {
    24  	return "System.out.Println(\"Hello World!\")"
    25  }
    26  
    27  func writeFirstProgram(p Programmer) {
    28  	fmt.Printf("p.type: %T\nret: %v\n\n", p, p.writeHelloWorld())
    29  }
    30  
    31  func TestPolymorphism(t *testing.T) {
    32  	goProg := &GoProgrammer{}
    33  	javaProg := new(JavaProgrammer)
    34  	writeFirstProgram(goProg)
    35  	writeFirstProgram(javaProg)
    36  }