Golang如何体现面向对象三大特征之封装?

Posted Casey321

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang如何体现面向对象三大特征之封装?相关的知识,希望对你有一定的参考价值。

封装

基本介绍

Golang仍然有面向对象编程的继承、封装和多态的特性,只是实现的方法和其它OOP语言不一样,下面我们来看看Golang是如何实现封装的。

封装介绍

封装(encapsulation)就是把抽象出的字段和对字段的操作封装在一起,数据被保护在内部,程序的其它包只有通过被授权的操作(方法)才能对字段进行操作。

封装的好处

  • 隐藏实现细节。
  • 可以对数据进行验证等。

golang如何体现封装

  • 对结构体中的属性进行封装
  • 通过方法,包实现封装

封装的实现

  • 将结构体,字段(属性)的首字母小写(其他包不能使用,类似private)。
  • 给结构体所在包提供一个工厂模式的函数,首字母大写。类似一个构造函数。
  • 提供一个首字母大写的set方法(类似其它语言的public),用于对属性判断并赋值。
  • 提供首字母大写的get方法,用于获取属性的值。
    特别说明:在Golang开发中并没有特别强调封装,这点并不像Java,所以不能总是用java的语法特性来看待Golang,Golang本身对面向对象的特征做了简化。

代码实现:
student.go

package model
import(
	"fmt"
)
type student struct
	name string
	age int


func NewStudent(name string,age int) *student
	return &student
		name : name,
		age : age,
	


func (this *student) GetName()string
	return this.name


func (this *student) SetName(name string)
	this.name = name

func (this *student) GetAge()int
	return this.age

func (this *student) SetAge(age int)
	//对年龄合法性校验
	if age > 0 && age <150
		this.age = age
	else
		fmt.Println("年龄不合法...")
	
	

test.go

package main

import(
	"fmt"
	"go_code/OOP/model"
)

func main() 
	 
	stu := model.NewStudent("Casey",18)
	fmt.Println(*stu)
	stu.SetName("321")
	fmt.Println(stu.GetName())
	stu.SetAge(20)
	fmt.Println(stu.GetAge())
	

运行结果:

博主首页链接:https://blog.csdn.net/weixin_44736475
原创不易,希望大家多多支持
如果文章对你有帮助,记得一键三连哦!❤️❤️❤️

以上是关于Golang如何体现面向对象三大特征之封装?的主要内容,如果未能解决你的问题,请参考以下文章

面向对象三大特征之 封装性

Golang如何体现面向对象三大特性之继承?

Golang-面向对象编程三大特性-多态

java面向对象的三大特征?

Java中面向对象的三大特征是啥?

java基础面向对象三大特征:封装