七叶笔记 » golang编程 » golang2021面向对象(33)面向对象编程三大特性-继承

golang2021面向对象(33)面向对象编程三大特性-继承

 

看一个问题,引出继承的必要性

一个小问题,看个学生考试系统的程序 extends01.go,提出代码复用的问题

 

 

 

 

Ø        走一下代码

package main

import (

“fmt”

 

)

 //编写一个学生考试系统

//小学生

type Pupil struct { Name string Age int

Score int

}

//显示他的成绩

func (p *Pupil) ShowInfo() {

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

}

func (p *Pupil) SetScore(score int) {

//业务判断 p.Score = score

}

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

}

//大学生, 研究生。。

//大学生

type Graduate struct { Name string

Age int Score int

}

//显示他的成绩

func (p *Graduate) ShowInfo() {

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

}

func (p *Graduate) SetScore(score int) {

//业务判断 p.Score = score

}

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

}

//代码冗余.. 高中生….

 func main() {

//测试

var pupil = &Pupil{ Name :”tom”, Age : 10,

}

pupil.testing() pupil.SetScore(90) pupil.ShowInfo()

//测试

 

var graduate = &Graduate{ Name :”mary”,

Age : 20,

}

graduate.testing() graduate.SetScore(90) graduate.ShowInfo()

}

Ø        对上面代码的小结

1) Pupil 和 Graduate  两个结构体的字段和方法几乎,但是我们却写了相同的代码, 代码复用性不强

2) 出现代码冗余,而且代码不利于维护,同时也不利于功能的扩展。

3) 解决方法-通过继承方式来解决

相关文章