Go基础(7)-golang面向对象三大特征(封装,继承,多态)-创新互联
我们注重客户提出的每个要求,我们充分考虑每一个细节,我们积极的做好成都网站设计、成都网站制作、外贸网站建设服务,我们努力开拓更好的视野,通过不懈的努力,创新互联赢得了业内的良好声誉,这一切,也不断的激励着我们更好的服务客户。 主要业务:网站建设,网站制作,网站设计,微信平台小程序开发,网站开发,技术开发实力,DIV+CSS,PHP及ASP,ASP.Net,SQL数据库的技术开发工程师。1,抽象1.1 抽象的练习
分享名称:Go基础(7)-golang面向对象三大特征(封装,继承,多态)-创新互联
标题URL:http://azwzsj.com/article/dpsoid.html
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,创建 personpackage 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,接口的注意事项和细节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])
}
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
分享名称:Go基础(7)-golang面向对象三大特征(封装,继承,多态)-创新互联
标题URL:http://azwzsj.com/article/dpsoid.html