golang多态、父类方法重写

参考解析

题目来源:腾讯

答案:

  1. golang多态

    golang中采用接口实现多态。golang里面有一个接口类型interface,任何类型只要实现了接口类型,都可以赋值,如果接口类型是空,那么所有的类型都实现了它。

  1. package main
  2. import "fmt"
  3. type Person interface {
  4. Say()
  5. }
  6. type student struct {
  7. age int
  8. grade int
  9. }
  10. type teacher struct {
  11. age int
  12. }
  13. func (s *student) Say() {
  14. fmt.Println("I'm a student")
  15. }
  16. func (t *teacher) Say() {
  17. fmt.Println("I'm a teacher")
  18. }
  19. func Hello(p Person) {
  20. p.Say()
  21. }
  22. func main() {
  23. t := &teacher{}
  24. s := &student{}
  25. Hello(t)
  26. Hello(s)
  27. }

2.golang父类方法重写

go语言中的继承可以通过结构体来实现。子类重写父类的同名method函数;调用时,是先调用子类的method,如果子类没有,才去调用父类的method。

  1. package main
  2. import "fmt"
  3. type Person struct {
  4. name string
  5. age int
  6. }
  7. type student struct {
  8. Person
  9. grade int
  10. }
  11. func (p *Person) Say() {
  12. fmt.Printf("Name: %v, Age: %v\n", p.name, p.age)
  13. }
  14. func (s *student) Say() {
  15. fmt.Printf("Name: %v, Age: %v, Grade: %v\n", s.name, s.age, s.grade)
  16. }
  17. func main() {
  18. s := &student{
  19. Person: Person{
  20. name: "lls",
  21. age: 24,
  22. },
  23. grade: 2,
  24. }
  25. s.Say()
  26. }
  27. //output: Name: lls, Age: 24, Grade: 2