Bootstrap

Go基础(7)-golang面向对象三大特征(封装,继承,多态)

在这里插入图片描述

1,抽象

在这里插入图片描述

1.1 抽象的练习

package main

import "fmt"

type Account struct {
	AccountNo string
	Pwd string
	Balancd float64
}
//存钱
func (account *Account)Deposite(money float64,pwd string)  {
	if(pwd!=account.Pwd){
		fmt.Println("密码不正确")
		return
	}
	if(money <= 0){
		fmt.Println("余额不正确")
		return
	}
	account.Balancd += money
	fmt.Println("存款成功")
}
//取钱
func (account *Account)WithDraw(money float64,pwd string)  {
	if(pwd!=account.Pwd){
		fmt.Println("密码不正确")
		return
	}
	if(money <= 0 || money>account.Balancd){
		fmt.Println("余额不正确")
		return
	}
	account.Balancd -= money
	fmt.Println("取款成功")
}
//查询余额
func (account *Account)Query(pwd string)  {
	if(pwd!=account.Pwd){
		fmt.Println("密码不正确")
		return
	}
	fmt.Println("你的账号为:",account.AccountNo)
	fmt.Println("你的余额为:",account.Balancd)
}
func main() {
	account:=Account{
		AccountNo: "gsyh111",
		Pwd: "666666",
		Balancd:   100,
	}
	//查询余额
	account.Query("666666")
	//取钱
	account.WithDraw(65,"666666")
	account.Query("666666")
	//存钱
	account.Deposite(1000,"666666")
	account.Query("666666")
}

在这里插入图片描述

2,封装

2.1,封装的介绍

在这里插入图片描述

2.2,封装的好处

在这里插入图片描述

2.3,封装的步骤

在这里插入图片描述

2.4,封装的入门案例

2.4.1,创建 person

package model

import "fmt"

type person struct {
	Name string
	age int //其他包不能访问
	sal float64 //其他包不能访问
}

func NewPerson(name string)*person  {
	return &person{
		Name: name,
	}
}

//为了访问age和sal我们编写一对Setxxx个Getxxx的方法
func (p *person)SetAge(age int)  {
	if(age > 0 && age < 150){
		p.age = age
	}else{
		fmt.Println("年龄范围不正确")
	}
}

func (p *person)GetAge() int {
	return p.age
}

func (p *person)SetSal(sal float64)  {
	if(sal >= 3000 && sal <= 30000){
		p.sal = sal
	}else{
		fmt.Println("工资范围不正确")
	}
}

func (p *person)GetSal() float64 {
	return p.sal
}

2.4.2,创建main方法

package main

import (
	"demo10_面向对象三大特性/demo02_封装/model"
	"fmt"
)

func main() {
	p:= model.NewPerson("李乃龙")
	fmt.Println(*p)
	p.SetAge(25)
	p.SetSal(10500.00)
	fmt.Println(p.Name)
	fmt.Println(p.GetAge())
	fmt.Println(p.GetSal())
}

3,继承

3.1,继承的概念

在这里插入图片描述

3.2,继承的基本语法

在这里插入图片描述

3.3,基础的入门演示

package main

import "fmt"

type student struct {
	Name string
	Age int
	Score float64
}
//小学生
type Pupil struct {
	student
}

//大学生
type Graduate struct {
	student
	Hoddy string
}
//研究生

func (student *student)ShowInfo()  {
	fmt.Println("姓名=>",student.Name)
	fmt.Println("年龄=>",student.Age)
	fmt.Println("分数=>",student.Score)
}

//设置分数
func (student *student)SetScore(score float64)  {
	student.Score = score
}

func (student *student)Testing(str string)  {
	fmt.Println(str)
}

func main() {
	var pupil Pupil
	pupil.Testing("小学生考试中")
	pupil.SetScore(100)
	pupil.Name = "小学生李乃龙"
	pupil.Age = 11
	pupil.ShowInfo()

	var graduate Graduate
	graduate.Testing("大学生考试中")
	graduate.SetScore(100)
	graduate.Name = "大学生李乃龙"
	graduate.Hoddy = "写代码"
	graduate.Age = 20
	graduate.ShowInfo()
	fmt.Println("大学生爱好=>",graduate.Hoddy)
}

在这里插入图片描述

4,接口

4.1,为什么要接口

在这里插入图片描述

4.2,接口快速入门

package main

import "fmt"

//声明/定义一个接口
type Usb interface {
	//声明了两个没有实现的方法
	Start()
	Stop()
}
type Phone struct {

}
//让phone实现Usb接口的方法
func (p Phone) Start()  {
	fmt.Println("手机开始工作...")
}

func (p Phone) Stop()  {
	fmt.Println("手机停止工作...")
}

//让Camera实现Usb接口的方法
type Camera struct {

}
func (c Camera) Start()  {
	fmt.Println("相机开始工作...")
}

func (c Camera) Stop()  {
	fmt.Println("相机停止工作...")
}

//计算机
type Computer struct {

}
//只要是实现类usb接口的都可以传过来
func (c *Computer) Working(usb Usb){
	usb.Start()
	usb.Stop()
}
func main() {
	var computer Computer
	var camera Camera
	var phone Phone
	computer.Working(camera)
	computer.Working(phone)
}

在这里插入图片描述

4.3,接口介绍

在这里插入图片描述

4.4,接口的应用场景

在这里插入图片描述

4.5,接口的注意事项和细节

在这里插入图片描述
在这里插入图片描述

4.6,验证第1点细节

package main

import "fmt"

type AinterFace interface {
	Say()
}

type Stu struct {
	Name string
}

func (stu Stu)Say(){
	fmt.Println("Stu Say()")
}
func main() {
	var stu Stu
	var a AinterFace = stu
	a.Say()
}

在这里插入图片描述

4.7,验证第5,6点细节

package main

import "fmt"
type AinterFace1 interface {
	Say()
}
type AinterFace2 interface {
	Hello()
}

type interger int

func (i interger) Say()  {
	fmt.Println(" interger say ==>",i)
}

func (i interger) Hello()  {
	fmt.Println(" interger Hello ==>",i)
}

func main() {
	var i interger
	var a AinterFace1 = i
	var b AinterFace2 = i
	a.Say()
	b.Hello()
}

在这里插入图片描述

4.8,验证第8点细节

package main

import "fmt"

type AinterFace3 interface {
	AinterFace4
	Hello3()
}

type AinterFace4 interface {
	Say()
}
type Stu2 struct {

}

func (stu2 Stu2) Hello3(){
	fmt.Println("Hello3")
}

func (stu2 Stu2) Say(){
	fmt.Println("Say")
}

func main() {
	var stu Stu2
	var a AinterFace3 = stu
	a.Say()
	a.Hello3()
}

在这里插入图片描述

5,多态

在这里插入图片描述

package main

import "fmt"

//声明/定义一个接口
type Usb interface {
	//声明了两个没有实现的方法
	Start()
	Stop()
}
type Phone struct {
	Name string
}
//让phone实现Usb接口的方法
func (p Phone) Start()  {
	fmt.Println("手机开始工作...")
}

func (p Phone) Stop()  {
	fmt.Println("手机停止工作...")
}

//让Camera实现Usb接口的方法
type Camera struct {
	Name string
}
func (c Camera) Start()  {
	fmt.Println("相机开始工作...")
}

func (c Camera) Stop()  {
	fmt.Println("相机停止工作...")
}

//计算机
type Computer struct {

}
//只要是实现类usb接口的都可以传过来
func (c *Computer) Working(usb Usb){
	usb.Start()
	usb.Stop()
}
//多态数组
func main() {
	//定义一个Usb接口数组,里面存放Camera和Phone的结构体变量
	var usbArr[3]Usb
	usbArr[0]=Phone{"小米"}
	usbArr[1]=Phone{"Oppo"}
	usbArr[2]=Camera{"尼康"}
	fmt.Println(usbArr[1])
	var computer Computer
	computer.Working(usbArr[2])
}

在这里插入图片描述

;