新年学新语言Go之五

本文介绍了Go语言的面向对象特性,特别是接口的定义、实现和多态运用。通过实例展示了如何定义接口、结构体实现接口以及动态调用接口方法。Go的接口设计与Java类似但更灵活,允许在运行时动态绑定实现类。
摘要由CSDN通过智能技术生成

一、前言

Go虽然不算是面向对象语言,但它支持面向对象一些特性,面向接口编程是Go一个很重要的特性,而Go的接口与Java的接口区别很大,Go的接口比较复杂,这里仅用一个最简单例子做介绍,复杂的我也还没学。

二、接口定义与实现简单例子

与定义结构体(struct)类似,上面代码我们定义了Shaper接口,它有一个方法Area,任何实现了这个函数(或方法)的类型我们都认为它实现了Shaper接口。

说明

1、实现接口并不需要显式声明,不用像Java那样用implements实现接口,只需要实现接口中所有方法(函数)就表示实现了该接口。

2、接口可以被结构体(可以理解为长残了的类)实现,也可以被函数类型实现。

3、接口被实现条件 

  • 接口的方法与实现接口类型方法格式要完全一致,包括方法名、参数类型、返回值都需要完全一样。

  • 接口所有方法都被实现。

这点和Java没有什么区别。

4、area := Shaper(rect) 这条语句绑定了接口和结构体,然后就可以调用接口的方法了。

三、多态

面向对象三大特性,封装、继承及多态,Go既然支持了OOP,那多态的特性它肯定也要能支持的,多态简单理解就是在运行时决定使用哪个实现类,我们来看一个简单例子理解一下。

结构体1定义及对接口的实现

结构体2定义及对接口的实现

调用接口的函数会执行对应结构体函数的实现

根据运行时传入的是矩形还是三角形结构体调用对应的实现函数。

注:其实和Java中接口的概念还是比较类似的,Go相对更灵活吧(是指在调用时再去绑定接口和实现?偶还没领悟到灵活在哪?)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值