go语言 面对对象编程(转)

转自:https://zhuanlan.zhihu.com/p/94625212

面向对象的三大基本特征:

封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式
继承:使得子类具有父类的属性和方法或者重新定义、追加属性和方法等
多态:不同对象中同种行为的不同实现方式

在 Go 语言中没有 public、private、protected 这样的访问控制修饰符,它是通过字母大小写来控制可见性的。

如果定义的常量、变量、类型、接口、结构、函数等的名称是大写字母开头,这表示它们能被其它包访问或调用(相当于 public);非大写开头就只能在包内使用(相当于 private)。

1、封装

Person.go
在person文件夹中

package person

type Person struct{
	name string		//两个成员变量都是非大写字母开头,只能在包内使用
	age int
}
func (p *Person)GetName()string{
	return p.name
}
func (p*Person)SetName(name string){
	p.name = name
}
func (p *Person)GetAge()int{
	return p.age
}
func (p*Person)SetAge(age int){
	p.age = age
}

main.go

package main

import (
	"./person"
	"fmt"
	"strconv"
)


// 1、封装
func main(){
	p := new(person.Person)
	p.SetName("广大菜鸟")
	p.SetAge(21)
	fmt.Println(p.GetName()+" "+strconv.Itoa(p.GetAge()))
}

2、继承和多态

在 Go 语言中没有 extends 关键字,它使用在结构体中内嵌匿名类型的方法来实现继承。
匿名类型:即这些类型没有显式的名字。

package main
import "fmt"

type Person interface{
	speak()
	sleep()
}
//继承
type Teacher struct{
	Person
}
type Student struct{
	Person
}
// 多态部分:
func (t*Teacher)speak(){
	fmt.Println("hello ,world")
}
func (s * Student)speak(){
	fmt.Println("你好,世界")
}
func main(){
	t := new(Teacher)
	t.speak()			//hello ,world
	new(Student).speak() //你好,世界
}

总结
面向对象的三大特征是:封装、继承和多态
Go 语言使用结构体对属性进行封装,结构体就像是类的一种简化形式
在 Go 语言中,方法是作用在接收者(receiver)上的一个函数,接收者是某种类型的变量
名称首字母的大小写决定了该变量/常量/类型/接口/结构/函数……能否被外部包导入
无法被导入的字段可以使用 getter 和 setter 的方式来访问
Go 语言使用在结构体中内嵌匿名类型的方法来实现继承
使用接口可以实现多态

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值