您的位置 首页 golang

golang2021面向对象(37)继承基本介绍和示意图

继承可以解决代码复用,让我们的编程更加靠近人类思维。 当多个结构体存在相同的属性(字段)和方法时,可以从这些结构体中抽象出结构体(比如刚才的

Student),在该结构体中定义这些相同的属性和方法。

 

 

 

其它的结构体不需要重新定义这些属性(字段)和方法,只需嵌套一个 Student 匿名结构体即可。 [画 出示意图]

 

 

 

 

 

也就是说:在 Golang 中,如果一个 struct 嵌套了另一个匿名结构体,那么这个结构体可以直接访 问匿名结构体的字段和方法,从而实现了继承特性。

 

 

     嵌套匿名结构体的基本语法

type Goods struct {

Name string

Price int

}

type Book struct {

Goods        //这里就是嵌套匿名结构体 Goods Writer string

}

 

 

 

    快速入门案例

Ø        案例

我们对 extends01.go  改进,使用嵌套匿名结构体的方式来实现继承特性,请大家注意体会这样编程

 

的好处

 

 

Ø        代码实现

package main

 

 

 

import (

“fmt”

 

)

//编写一个学生考试系统 type Student struct {

Name string Age int Score int

}

 

 

 

//将 Pupil 和 Graduate 共有的方法也绑定到 *Student func (stu *Student) ShowInfo() {

 

 

fmt.Printf(“学生名=%v 年龄=%v 成绩=%v\n”, stu.Name, stu.Age, stu.Score)

}

 

func (stu *Student) SetScore(score int) {

//业务判断 stu.Score = score

}

 

 

 

//小学生

type Pupil struct {

Student //嵌入了 Student 匿名结构体

 

}

 

 

 

//显示他的成绩

 

 

 

//这时 Pupil 结构体特有的方法,保留

func (p *Pupil) testing() { fmt.Println(“小学生正在考试中…..”)

}

 

 

 

//大学生, 研究生。。

 

 

 

 

//大学生

type Graduate struct {

Student //嵌入了 Student 匿名结构体

 

}

 

 

 

 

//显示他的成绩

 

//这时 Graduate 结构体特有的方法,保留

func (p *Graduate) testing() { fmt.Println(“大学生正在考试中…..”)

}

 

 

 

//代码冗余.. 高中生…. func main() {

//当我们对结构体嵌入了匿名结构体使用方法会发生变化 pupil := &Pupil{}

pupil.Student.Name = “tom~” pupil.Student.Age = 8 pupil.testing() pupil.Student.SetScore(70) pupil.Student.ShowInfo()

 

 

 

 

graduate := &Graduate{} graduate.Student.Name = “mary~” graduate.Student.Age = 28 graduate.testing() graduate.Student.SetScore(90) graduate.Student.ShowInfo()

文章来源:智云一二三科技

文章标题:golang2021面向对象(37)继承基本介绍和示意图

文章地址:https://www.zhihuclub.com/99293.shtml

关于作者: 智云科技

热门文章

网站地图