demo.go(接口,多态):
package main
import "fmt"
// 定义接口 (规则、协议)
type Humen interface {
// 方法 (规则)
SayHello()
//SayHello(int, int) int // 可以有参数和返回值
}
// 学生类
type Student struct {
name string
age int
}
// 学生类的方法 (让学生类符合接口的规则)
func (stu *Student) SayHello() {
fmt.Printf("我是学生,名字是%s,我%d岁了\n", stu.name, stu.age)
}
func main() {
// 学生对象
stu := Student{"张三", 20}
stu.SayHello()
// 定义接口类型的变量
var h Humen
h = &stu // 可以将符合接口规则的对象的地址赋值给接口变量。 (多态) (接口其实就是一个地址(指针),指向了实际的对象)
h.SayHello() // 可以通过接口调用对象的方法。
fmt.Printf("%T", h) // *main.Student (指向实际对象的指针)
}