其他分享
首页 > 其他分享> > 9.13Go之结构体之类型内嵌和结构体内嵌

9.13Go之结构体之类型内嵌和结构体内嵌

作者:互联网

9.13Go之结构体之类型内嵌和结构体内嵌

类型内嵌和结构体内嵌的含义

概念:

这个概念在C当中也是一样的,这样的概念类似于Java当中的类的继承机制。可以使用父类的属性和公开的方法

示例代码:

需求:

package main

import "fmt"

/*
定义一个内嵌结构体
*/
type inner struct {
num1 int
num2 int
}

/*
定义另一个外部结构体嵌入内嵌结构体
*/
type outer struct {
num3 int
num4 float64
//匿名结构体
int
//内嵌结构体
inner
}

func main() {
//实例化外部结构体
outer1 := new(outer)
//访问变量并且选择性的初始化
outer1.num3 = 30
outer1.int = 80
outer1.num1 = 20 //这个成员在inner当中
outer1.num2 = 30 //这个成员在inner当中
//打印结果
fmt.Printf("outer.num3 is:%d\n", outer1.num3)
fmt.Printf("outer.int is:%d\n", outer1.int)
fmt.Printf("outer.num1 is:%d\n", outer1.num2)
fmt.Printf("outer.num2 is:%d\n", outer1.num2)
fmt.Println("############################")
//使用结构体字面量赋值
outer2 := outer{6, 3.14, 60, inner{5, 8}}
fmt.Printf("outer2 is:", outer2)
}

内嵌结构体

概念:

可以从另外一个或一些类型继承部分或全部实现

示例代码:

package main

import "fmt"

/*
定义一个内嵌结构体
*/
type inner struct {
num1 int
num2 int
}

/*
定义另一个外部结构体嵌入内嵌结构体
*/
type outer struct {
num3 int
num4 float64
//匿名结构体
int
//内嵌结构体
inner
}

结构内嵌特性

注意:

构体内嵌模拟类的继承

概念:

Go语言的结构体内嵌特性就是一种组合特性

可以快速构建对象的不同特性

示例代码:

package main

import "fmt"

/*
定义一个飞行结构体--->和Java当中定义类不一样,是一种存在于类之上的抽象的东西
*/
type Flying struct {

}

/*
定义这个飞行结构体能够拥有的方法--->类似于Java中类的方法
由于结构体当中的特性,结构体当中只能够定义成员不能够定义函数
*/
func (f *Flying) Fly() {
fmt.Println("can fly")
}

/*
定义一个可行走的结构体--->行走类
*/
type Walking struct {

}

/*
定义这个行走结构体当中的方法
*/
func (w *Walking) Walk() {
fmt.Println("can walk")
}

/*
定义人类,人类能够行走不能飞--->到这里定义的人类的结构体才是类似于Java当中的类
内嵌的结构体相当于类当中的方法。只是Go当中使用了另外一种展现了面向对象的思想
*/
type Human struct {
Walking
}

/*
定义鸟类
*/
type Bird struct {
Flying
Walking
}

func main() {
//实例化人类
hu := new(Human)
fmt.Println("Human is:")
hu.Walk() //访问到内嵌结构体当中的方法
fmt.Println("##########")
//实例化鸟类
br := new(Bird)
fmt.Println("Bird is:")
br.Fly()
br.Walk()
}

注意:

使用Go语言的内嵌结构体实现对象特性,可以自由地在对象中增、删、改各种特性

标签:内嵌,定义,int,fmt,9.13,体之,outer1,Go,结构
来源: https://www.cnblogs.com/JunkingBoy/p/15264571.html