【Go】基础语法之接口
接口定义:
利用关键字interface来定义一个接口,接口是一组方法的集合。
例如:
type People interface {
Show(name string, age int) (id int, err error)
Set(name string, age int)
}
接口的实现:
跟结构体的成员方法实现是一样的。
func (object of implement func) func_name (parameters) (return type){
....//func body
}
例如:
package main import "fmt"
func main() {
fmt.Println("=================Live interface===============")
var live Live
s := &Student{People{"puyangsky", , }, }
live = s
live.speak("I am happy")
live.eat()
fmt.Println("================Earn interface================")
var earn Earn
earn = &Worker{People{"humeiling", , }, }
earn.eat()
earn.work()
earn.getMoney()
fmt.Println("=====================End======================")
} type People struct {
name string
age int32
id int32
} type Student struct{
People
grade float32
} type Worker struct{
People
salary float32
} type Live interface {
eat()
speak(something string)
} type Earn interface {
eat()
work()
getMoney(money int32)
} func (s *Student) eat() {
fmt.Printf("%s is eating...\n", s.name)
} func (s *Student) speak(something string) {
fmt.Printf("%s is speaking: %s\n", s.name, something)
} func (w *Worker) eat() {
fmt.Printf("%s is eating ...\n", w.name)
} func (w *Worker) work() {
fmt.Printf("%s is working...\n", w.name)
} func (w *Worker) getMoney(money int32) {
fmt.Printf("%s earned %d money..\n", w.name, money)
}
结果如下:
接口的使用:
一个结构体必须实现了一个接口的所有方法,才能被一个接口对象接受。这一点和Java语言中的接口的要求是一样的。
例如上例中的Live接口的对象live,只能接受实现了Live接口所有方法的Student结构体的对象,而不能接受其他结构体的对象。
一个接口可以被多个结构体实现,一个结构体可以实现多个接口的方法,是多对多的关系。
使用方法:先定义一个接口的对象,用实现了该接口所有方法的结构体的对象来初始化该接口对象,然后就可以通过该接口对象来访问接口的方法。
【Go】基础语法之接口的更多相关文章
- Java基础语法<九> 接口与内部类
1 接口 interface implement 接口的所有方法自动地属于public.因此,在接口中声明方法时,不必提供关键字public. 接口可以包含多个方法,接口中可以定义常量.接口中的 ...
- Java基础学习笔记八 Java基础语法之接口和多态
接口 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”.接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成.这样将功能的定义 ...
- Swift与C#的基础语法比较
背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...
- python之最强王者(2)——python基础语法
背景介绍:由于本人一直做java开发,也是从txt开始写hello,world,使用javac命令编译,一直到使用myeclipse,其中的道理和辛酸都懂(请容许我擦干眼角的泪水),所以对于pytho ...
- 黑马程序员——OC语言基础语法 面向对象的思想
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结)(一)基础语法 1)关键字 @interface.@implementati ...
- javascript基础语法——词法结构
× 目录 [1]java [2]定义 [3]大小写[4]保留字[5]注释[6]空白[7]分号 前面的话 javascript是一门简单的语言,也是一门复杂的语言.说它简单,是因为学会使用它只需片刻功夫 ...
- Objective-C基础语法快速入门
Objective-C基础语法快速入门 2010-11-04 16:32 折酷吧 zheku8 字号:T | T 假如我们对面向对象的思维已经C语言都很熟悉的话,对于我们学习Objective-C将会 ...
- JSP/Servlet基础语法
相关学习资料 http://my.oschina.net/chape/blog/170247 http://docs.oracle.com/cd/E13222_01/wls/docs81/webapp ...
- Python 基础语法
Python 基础语法 Python语言与Perl,C和Java等语言有许多相似之处.但是,也存在一些差异. 第一个Python程序 E:\Python>python Python 3.3.5 ...
随机推荐
- .net core Fundamentals
• Application Startup 應用程序啟動 • Middleware 中間件 • Working with Static Files 靜態文件 • Routing 路由 • URL Re ...
- JVM-内存回收算法--复制算法
复制算法,它将堆上的内存分为两个大小相等的区域,一个是空闲区域,一个是活动区域.在程序运行中,实际使用的是活动区域,也就是有50%的空间被浪费掉. 复制算法的实现过程:1.找出活动空间中所有存活的对象 ...
- 【BZOJ】1726 [Usaco2006 Nov]Roadblocks第二短路
[算法]最短路(spfa) 次短路 [题解] 正反跑两次SPFA,然后枚举每一条边,如果起点到一个端点的最短路+另一个端点到终点的最短路+长度 ≠ 最短路,则和答案比较,保存最小值. #include ...
- Java 对象排序详解
很难想象有Java开发人员不曾使用过Collection框架.在Collection框架中,主要使用的类是来自List接口中的ArrayList,以及来自Set接口的HashSet.TreeSet,我 ...
- HDU 1548 A strange lift (广搜)
题目链接 Problem Description There is a strange lift.The lift can stop can at every floor as you want, a ...
- 9、MySQL常见的函数?
请参考下面的博客文章: MySQL常见的函数
- bzoj 2786 DP
我们可以将=左右的两个数看成一个块,块内无顺序要求,把<分隔的看成两个块,那么我们设w[i][j]代表将i个元素分成j个块的方案数,那么显然w[i][j]=w[i-1][j]*j+w[i-1][ ...
- Java中volatile修饰符,不稳定标记的用法笔记
今天学java特性时,发现了volatile修饰符,这个修饰符修饰的变量告诉java编译器忽略优化机制,这样的优势是: java优化后,寄存器会缓存内存里的变量,另一个线程修改这个变量的内存时,不会同 ...
- 比特币编译(Ubuntu 16.04)
安装比特币需要的所有库 sudo apt-get install build-essential libtool autotools-dev automake pkg-config libssl-de ...
- Mac iphone 使用 如何修改apple 用户名 XXX的mac Mac 与iphone如何连接 传递文件 为iphone增加铃声 iphone铃声的制作---城
1.更改mac apple id Apple ID 即用户名称,您可以将其用于与 Apple 有关的所有操作.为某个 Apple 服务(如 iCloud 或 App Store)创建帐户时即创建了 A ...