网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
go语言中可以简单地看作对struct的封装
type Person struct {
name string
}
type Student struct {
name string
}
type Teacher struct {
name string
}
go语言中没有继承,但可以通过“匿名组合”实现继承
结构体继承,方法继承,方法重写
//父类
type Person struct {
name string
age int
}
type Student struct {
Person //匿名继承
//*Person //指针作为匿名字段
//p Person//别名继承
height string
//子类和父类字段重名
name string
}
type Teacher struct {
Person //匿名继承
//*Person //指针作为匿名字段
//p Person//别名继承
sex string
}
//基本类型不能作为对象直接使用,为基本类型绑定方法,需要起别名才可以
type newint int
func (i newint) add(a newint) newint {
return a + 1
}
//方法继承和重写(给结构体绑定方法)
//*代表是否可以读写(修改),*代表接收者为指针
func (p *Person) eat(){
fmt.Println("人类吃饭")
}
func (p *Person) drink(){
fmt.Println("人类喝水")
}
func (p *Student) eat(){
fmt.Println("学生吃饭")
}
func main() {
tea :=Teacher{Person{"人类",1},"男"}
//子类和父类字段重名,默认给子类赋值,给父类赋值需要加父类名称调用
tea.name = "张飞"
tea.Person.name = "大飞"
//子类可以直接使用父类字段
fmt.Println(tea.name)
fmt.Println(tea.age)
fmt.Println(tea.sex)
stu :=Student{Person{"人类",1},"188"}
//方法继承,子类可以直接调用父类方法
stu.drink()
//方法重写,默认执行子类方法
stu.eat()
stu.Person1.eat()
//如果是指针作为匿名字段
var stu Student
//需要new一个空间
stu.Person = new(Person)
//正常模式
(*stu.Person).name = "典韦"
//简易模式
stu.name = "诸葛亮"
fmt.Println(stu.name)
//使用别名调用方法
var newi newint
result :=newi.add(2)
fmt.Println("为int定义别名",result)
}
接口
接口 ,给结构体定义接口,那么必须定义接口里面的所有方法才可以
//定义接口
type IHuman interface {
say()
eat()
}
type Stus struct {
name string
age int
}
type Teas struct {
name string
age int
sex string
}
//结构体实现接口方法1
func (stus *Stus) eat() {
fmt.Println(stus.name, "正在吃饭")
}
//结构体实现接口方法2
func (stus *Stus) say() {
fmt.Println(stus.name, "正在说话")
}
func (tea *Teas) eat() {
fmt.Println(tea.name, "正在吃饭")
}
func (tea *Teas) say() {
fmt.Println(tea.name, "正在说话")
}
//将接口作为函数参数实现多态
func dotest(hu IHuman) {
hu.say()
hu.eat()
}
//测试
func main() {
//多态调用
stus := Stus{"诸葛", 1}
dotest(&stus)
tea := Teas{"老师", 1,"男"}
dotest(&tea)
var h IHuman
h = &stus
h.say()
h.eat()
}
接口继承和转换
//接口继承和转换
type Humans interface {//子集
eat()
}
type Persons interface {//超集
Humans //匿名继承接口
![img](https://img-blog.csdnimg.cn/img_convert/424571aa3b5694a7c32114a1070211d1.png)
![img](https://img-blog.csdnimg.cn/img_convert/225b726ef1db22f93c58184968d08fef.png)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618658159)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
e Persons interface {//超集
Humans //匿名继承接口
[外链图片转存中...(img-kj88ZOM4-1715506156913)]
[外链图片转存中...(img-AVuW1VZ0-1715506156914)]
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618658159)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**