一.定义接口层

interface.go

package main
type Interface interface {   
    LogName()   
    LogAge()
}

var base Interface

func LogName()  {   
    base.logName()
}
func LogAge()  {   
    base.logAge()
}复制代码

接口定义了两个方法,并封装一下,可以提供给外部调用


二.父类层

person.go

package main

import "fmt"

type person struct {}
func (p *person)logName()  {   
    fmt.Println("person name")
}

func (p *person)logAge()  {   
    fmt.Println("person age")
}复制代码

实现了最基础的接口


三.子类

student.go

package main
import "fmt"
type student struct {   
    person
}
func init()  {   
    stu := &student{}   
    base = stu
}
func (s *student)logName()  {   
    fmt.Println("student name")
}复制代码

子类student继承了父类的所有方法,并且重写了logName方法.

将student实例赋予base接口实例上.


四.运行

main.go

package main
func main() {   
    LogAge()   
    LogName()
}复制代码

输出:

person age 

student name