go面向对象思想:封装、继承、多态
go 如何实现的封装、继承、和多态
- 封装:go通过结首字母大小写的方式,实现类方法和属性的公有化和私有化
- 继承:使用内嵌的方式,对结构体
struct
进行组合 - 多态:使用
interface
实现
封装: go中是通过结构体的方法去模拟类
package objects
//通过结构体的方式去模拟类
type User struct {
Id int8
Name string
age int8 //根据首字母方式表现私有 公有
}
//根据方法的首字母的大小写去判断是否外部访问
func (user *User) GetUser() string {
return user.Name + "pl";
}
继承 我们编写一个用户信息的类。UserInfo 通过 U 继承了User结构体 通过嵌套实现了类的继承
type UserInfo struct {
U User //继承这个Uset结构体
Record string //经历
stature float32 //身高
Sex int8 //性别
Introduction string //简介
Avatar string //头像
}
func (userinfo *UserInfo) GetUserInfo() *UserInfo {
user := new(UserInfo)
user.Avatar ="xxx"
return user
}
多态实现 完整代码
package objects
//通过结构体的方式去模拟类
type User struct {
Id int8
Name string
age int8 //根据首字母方式表现私有 公有
}
//接口类
type UserInterface interface {
GetUserInfo() *UserInfo
}
//通过结构体的方式去模拟类
type User struct {
Id int8
Name string
age int8 //根据首字母方式表现私有 公有
}
//根据方法的首字母的大小写去判断是否外部访问
func (user *User) GetUser() string {
return user.Name + "pl";
}
type UserInfo struct {
U User //继承这个Uset结构体
Record string //经历
stature float32 //身高
Sex int8 //性别
Introduction string //简介
Avatar string //头像
}
func (userinfo *UserInfo) GetUserInfo() *UserInfo {
user := new(UserInfo)
user.Avatar ="xxx"
return user
}
如上代码所示:UserInfo
结构体继承了UserInterface
接口 并实现了GetUserInfo()
的方法
我们来实现打印一下这个方法GetUserInfo
编写main.go
入口文件
package main
import (
"fmt"
//类似于php的命名空间 引入
"object/objects"
)
func main(){
//实例化这个结构体
user :=new(objects.UserInfo)
//引用这个结构体对应的方法 并打印它
fmt.Println(user.GetUserInfo())
}
执行go run main.go
如图执行成功(注意代码1片段和代码2片段是在object目录下的同一个文件)
本作品采用《CC 协议》,转载必须注明作者和本文链接
多态
@whitek 好的 :joy: :sob: