Golang接口 interface 和结构体struct

前言

如果说最纯粹的面向对象语言,我觉得是Java无疑。而且Java语言的面向对象也是很直观,很容易理解的。class是基础,其他都是要写在class里的。


提示:以下是本篇文章正文内容,下面案例可供参考

一、Golang有类(class)吗

Golang没有类(class)。

Golang中并没有明确的面向对象的说法,不能算是一种面向对象的语言。因为:

  1. Golang只支持封装,不支持继承和多态

  2. Golang只有struct,没有class

  3. Golang并没有构造函数和析构函数的概念,这和Go语言的内存回收机制有关系。

    对于析构函数,Go提供了defer的关键字,它只要在函数内部实现,等到函数运行结束时便会被自动调用。defer有点像析构函数,但是却不是,因为它的作用范围是函数级别。(后续会整理defer )

    当然Go也可以采取其他手段模拟构造函数和析构函数,不过笔者觉得最好不这么做,既然Go特意这么设计,就不希望如此实现。

实在要扯上的话,可以将struct比作其它语言中的class。

类声明

这样就声明了一个类,其中没有public、protected、private的的声明。

golang用另外一种做法来实现属性的访问权限:属性的开头字母是大写的则在其它包中可以被访问,否则只能在本包中访问。类的声明和方法亦是如此。

  func (r ReceiverType) funcName(parameters) (results)

类方法声明

或者

和其它语言不一样,golang声明方法和普通方法一致,只是在func后增加了poem Poem这样的声明。加和没有加*的区别在于一个是传递指针对象,一个是传递值对象。

二、编写People接口和结构体

代码如下(示例):

package main

import "fmt"

//接口定义:人的功能
type PeopleFer interface {
	//说
	Say()
	//讲中文
	SayChinese()
	//跑
	Run()
	//跳
	Jump()
}

// 结构体声明: 人
type People struct {
	Name      string "名字"
	Age       int    "年龄"
	Sex       string "性别"
	BloodType string "血型"
}

// 接受者 人,实现say      ( p *People 指针接收着 )
func (p *People) Say() {
	fmt.Printf("%v 可以说话 say \n", p.Name)
}

// 接受者 人,实现say   (  p People 值接收着 )
func (p People) SayChinese() {
	fmt.Printf("%v 可以说中文 say \n", p.Name)
}

// 接受者 人,实现Run
func (p *People) Run() {
	fmt.Printf("%v 可以跑 run\n", p.Name)
}

// 接受者 人,实现Jump
func (p *People) Jump() {
	fmt.Printf("%v 可以跳 jump\n", p.Name)
}

// 实现方法,参数 接口,返回接口
func Impl(x PeopleFer) PeopleFer {
	fmt.Print("Impl() 实现方法,参数 接口,返回接口 \n")
	return x
}

func main() {
	var zSan = People{"张三", 20, "男", "O型"}
	fmt.Println(zSan)
	//指针接收者
	var zSanImpl = Impl(&zSan)
	zSanImpl.Say()
	zSanImpl.Run()
	zSanImpl.Jump()
	//值接受者
	zSanImpl.SayChinese()

	fmt.Println("------------------------------------------------")

	zSan = People{"李四", 12, "女", "A型"}
	fmt.Println(zSan)
	zSanImpl = Impl(&zSan)
	zSanImpl.Say()
	zSanImpl.Run()
	zSanImpl.Jump()
	zSanImpl.SayChinese()
}

代码运行输出(如下):

参考链接:https://www.cnblogs.com/xxnn/p/10552819.html

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘贤松

一本万利

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值