面向对象编程-继承引出 | 学习笔记

简介: 快速学习面向对象编程-继承引出

开发者学堂课程【Go 语言核心编程 - 面向对象、文件、单元测试、反射、TCP 编程面向对象编程-继承引出】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/626/detail/9691


面向对象编程-继承引出

 

内容简介:

一、继承引出

二、代码实现

三、代码小结

 

一、 继承引出

抛出问题,引出继承的必要性

每当去学一个新的东西都是有原因的, Golang 的设计者在设计继承时,为什么需要继承?这里有个小问题:看学生考试系统的程序 extends01.go ,提出代码复用性的原因。如下图所示的学生会管理系统,里面有各种各种的学生。

image.png

比如现在需要去记录各学生的考试成绩,应当如何处理?

 

二、代码实现

1. 代码实现,解决问题

走一下代码:

首先新建一个文件夹称为 extendsdemo ,在其中新建一个文件称为 main.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(“小学生正在考试中.....“)

}

func main(){

//测试

var pupil = &Pupil{

Name :”tom”,

Age : 10,

}

pupil.testing()

pupil.SetScore(90)

pupil.ShowInfo()

}

执行结果为:

D:\goproject\src\go_code\chapter11\encapexercise\main>cd ..

D:\goproject\src\go_code\chapter11\encapexercise>cd ..

D:\goproject\src\go_code\chapter11>cd extendsdemo

D:\goproject\src\go_code\chapter11\extendsdemo>go run main.go

小学生正在考试中.....

学生名=ton 年龄=10 成绩=90

image.png

2. 代码添加

将上文中仅有小学生的代码添加大学生和研究生,添加代码如下:

//大学生,研究生..

//大学生

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(“大学生正在考试中.....“)

}

//测试

var graduate = &Graduate{

Name :”mary”,

Age : 20,

}

graduate.testing()

graduate.SetScore(90)

graduate.ShowInfo()

执行结果为:

D:\goproject\src\go_code\chapter11\extendsdemo>go run main.go

小学生正在考试中.....

学生名=ton 年龄=10 成绩=90

大学生正在考试中.....

学生名=mary 年龄=20 成绩=90

image.png

 

三、代码小结

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

(2)出现代码冗余,而且代码不利于维护,同时也不利于功能的扩展。假设认为大学生 Graduate 和小学生 Pupil 他们都会做算术题,如果要给 Pupil 和 Graduate 用相同的方法,就需要加两份同样的代码,所以说不利于维护,同时也不利于功能的扩展。

(3)解决方法-通过继承方法来解决。写了一段代码过后引出继承的概念,为什么需要继承?先抛出了一个问题,通过其告诉你们面向对象编程的时候没有继承可能就会出现代码冗余,从而不利用代码的维护,因此继承便呼之欲出。

相关文章
|
5月前
|
Java 开发者
Java面向对象编程(OOP)的四个主要概念
【6月更文挑战第19天】Java OOP的基石是封装、抽象、继承和多态。封装是通过类隐藏数据细节;抽象简化复杂性,用接口和抽象类实现;继承让子类从父类继承属性和行为,促进代码重用;多态一个接口可有多种形态,分编译时和运行时。这些概念支持灵活且可扩展的软件设计。
44 1
|
6月前
|
Java 程序员 数据安全/隐私保护
Java面向对象编程:类和对象详解
Java面向对象编程:类和对象详解
52 0
|
6月前
|
Serverless PHP
当谈论面向对象编程时,这四个概念是非常重要的。以下是对接口、继承、封装和多态的简要说明
本文介绍了面向对象编程的四个核心概念:接口、继承、封装和多态。接口定义对象的行为规范,类通过实现接口确保符合所需行为。继承允许在已有类基础上创建新类,实现代码重用。封装是将数据和操作捆绑并隐藏内部细节,提高安全性和可维护性。多态使对象在运行时能表现出不同行为,增加代码灵活性和可扩展性。文中还提供了代码示例来说明这些概念。
38 0
|
6月前
|
Java
Java面向对象编程,解释封装、继承和多态的概念。
Java面向对象编程,解释封装、继承和多态的概念。
78 2
|
12月前
|
Java
探秘面向对象编程:封装、继承、多态的精髓与实践
探秘面向对象编程:封装、继承、多态的精髓与实践
|
存储 数据安全/隐私保护 Python
面向对象编程(OOP):理解类、封装性的关键概念
面向对象编程(OOP):理解类、封装性的关键概念
145 0
再次理解多态概念
再次理解多态概念
64 0
|
设计模式 存储 安全
【Java设计模式 面向对象设计思想】一 再谈面向对象和封装、抽象、继承、多态四大特性
【Java设计模式 面向对象设计思想】一 再谈面向对象和封装、抽象、继承、多态四大特性
83 0
面向对象程序设计第七章:继承与派生
面向对象程序设计第七章:继承与派生
136 0
面向对象程序设计第七章:继承与派生
|
Java 编译器
java面向对象三大特性,多态篇
1.概述 多态是同一个行为具有多个不同表现形式或形态的能力。 多态就是同一个接口,使用不同的实例而执行不同操作,如图所示:
160 0
java面向对象三大特性,多态篇
下一篇
无影云桌面