package main
import "fmt"
//动物类
type Animal struct {
Name string
Legs int
}
//狗类
type Dog struct {
Animal //继承Animal类
Tail int
}
//狗类下的方法
func (d Dog) Speak() {
fmt.Println("汪汪汪!")
}
//猫类
type Cat struct {
Animal //继承Animal类
eyes int
}
//猫类下的方法
func (c Cat) Speak() {
fmt.Println("喵~~~")
}
//所有拥有Speak()方法的接口
type SpeakAnimal interface {
Speak()
}
func main() {
//实例化对象,并显示申明类中所有变量
dog := Dog{Animal{"dahuang", 4}, 1}
cat := Cat{Animal{"xiaohua", 4}, 2}
var s SpeakAnimal
s = dog
s.Speak()
s = cat
s.Speak()
}
GO的结构特性:导包,类型,类型的方法,函数
1.type
- 类的关键字由class变为了type
- 省略了修饰符,由类名的首字母大小写决定访问权限
- 在类结构体中包含了所有类的成员变量
2.func
func(type Type) Method(int in) int out {
return in
}
- func(可指定为类的方法) 方法名(传入参数) 返回值
- 在go里只有类的方法才叫方法,没有指定类的叫函数。
- 需要特殊注意的是返回值可有多个
- 注意方法的参数的值传递与引用传递的区别
3.继承
- Dog类和Cat类都继承了Animal类,同时它们都具有了Animal类的属性和方法。
- 一般情况下,子类的对象可以调父类的属性,但是如果子类和父类中有重名的属性的话,需要显式调用。(子类.父类.父类的属性)
- 尽量不要继承!
4.interface
- interface由方法集所构成
- GO中interface是隐式声明的,只要包含了接口中的所有方法,就实现了此接口
- 所以每一个type都隐式的实现了一个空interface,因为空interface的方法集为空