栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Go的继承与重写以及结构体嵌套

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Go的继承与重写以及结构体嵌套

1. 首先声明两个基础结构体(其他语言的基类吧:))
type Animal struct {
	Name string
}

type Old struct {
	Age int
}

并给Animal类增加一个方法Walk()

func (a *Animal) Walk() {
	fmt.Println("Animal Walk")
}
2. 让People类嵌套(继承)上面的Animal和Old类

这时可以有两种匿名嵌套(继承)方式

  • 嵌套结构体指针
  • 嵌套结构体
 // 匿名嵌套,而且嵌套的是一个结构体指针
type People struct {
	*Animal
	Old
}
// 匿名嵌套,而且嵌套的是一个结构体
type People struct {
	Animal
	Old
}

非匿名嵌套的方式不太优雅

type People struct {
	Animal Animal //非匿名嵌套Animal结构体
	Old
}
3. new一个People
func NewPeople() *People {
	return &People{
		Animal: &Animal{Name: "bok"}, //嵌套结构体指针的方式,嵌套结构体时改成Animal: Animal{Name: "bok"} 即可
		Old:    Old{Age: 18},
	}
}
4. 访问Walk()方法
people := NewPeople()
people.Animal.Walk() // 访问父类的Walk
people.Walk() // 访问自己的Walk方法(从父类Animal那里继承过来的)
// Animal Walk
// Animal Walk
5. 重写父类Walk()方法
func (p *People) Walk() {
	fmt.Println("Poeple Walk")
}
people := NewPeople()
people.Animal.Walk() // 访问父类的Walk
people.Walk() // 访问自己的Walk方法(重写父类的Walk方法)
// Animal Walk
// Poeple Walk
6. 完整代码
package main

import "fmt"

type Animal struct {
	Name string
}

type Old struct {
	Age int
}

func (a *Animal) Walk() {
	fmt.Println("Animal Walk")
}

type People struct {
	*Animal
	Old
}

func (p *People) Walk() {
	fmt.Println("Poeple Walk")
}

func NewPeople() *People {
	return &People{
		Animal: &Animal{Name: "bok"},
		Old:    Old{Age: 18},
	}
}

func main() {
	people := NewPeople()
	people.Animal.Walk()
	people.Walk()
	fmt.Println(people.Age)
	fmt.Println(people.Name)
	fmt.Printf("New people %v n", people)
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/314887.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号