【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", 22, 007}, 0}
    live = s
    live.speak("I am happy")
    live.eat()
    fmt.Println("================Earn interface================")
    var earn Earn
    earn = &Worker{People{"humeiling", 22, 002}, 0}
    earn.eat()
    earn.work()
    earn.getMoney(100)
    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结构体的对象,而不能接受其他结构体的对象。

一个接口可以被多个结构体实现,一个结构体可以实现多个接口的方法,是多对多的关系。

使用方法:先定义一个接口的对象,用实现了该接口所有方法的结构体的对象来初始化该接口对象,然后就可以通过该接口对象来访问接口的方法。

时间: 2024-11-04 12:14:35

【Go】基础语法之接口的相关文章

Java基础语法<九> 接口与内部类

1 接口  interface implement 接口的所有方法自动地属于public.因此,在接口中声明方法时,不必提供关键字public. 接口可以包含多个方法,接口中可以定义常量.接口中的域将被自动设为public static final. SwingConstants就是只定义了常量,而没有定义方法,任何实现了SwingConstant接口的类都自动地继承了这些常量,并可以在方法中直接地引用一些常量. 1.1 接口的特性 接口不是类,尤其不能使用new运算符实例化一个接口 但是可以声

Java基础学习笔记八 Java基础语法之接口和多态

接口 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”.接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成.这样将功能的定义与实现分离,优化了程序设计.请记住:一切事物均有功能,即一切事物均有接口. 接口的定义 与定义类的class不同,接口定义时需要使用interface关键字.定义接口所在的仍为.java文件,虽然声明时使用的为interface关键字的编译后仍然会产生.class文件.这点可以让我们将接口看做是一种

2.35 Java基础总结①抽象②接口③设计抽象类和接口的原则④接口和抽象类的区别

java基础总结①抽象②接口③设计抽象类和接口的原则④接口和抽象类的区别 一.抽象 abstract作用:不能产生对象,充当父类,强制子类正确实现重写方法和类相比仅有的改变是不能产生对象,其他的都有,包括构造.属性等等任何一个类只要有一个抽象的方法就成了抽象类 抽象方法 public abstract A();①方法是抽象的,这个类也是抽象的:②子类必须重写抽象方法,除非子类也是抽象类 抽象类可以没有抽象方法,但一般不这么设计 二.接口 interface 接口也是Java的一种引用数据类型(J

Java基础语法

Java的基础语法中包含字符集.标识符和关键字.变量和常量.语句.注释.运算符和表达式这些基本要素. 一.关键字 编程语言都有一些保留的单词,用于定义该语言,这些单词对于编译器有特殊含义,不能作为标识符使用: Java中的true.false.null这三个保留字,不能作为标识符使用,对于编译器有特殊含义: main是一个用于描述Java程序开始方法的特殊名称,它不是一个关键字: abstract 抽象 boolean 逻辑运算: 布尔 break 打破: 断开 byte 字节: case 例,

javascript基础语法——词法结构

× 目录 [1]java [2]定义 [3]大小写[4]保留字[5]注释[6]空白[7]分号 前面的话 javascript是一门简单的语言,也是一门复杂的语言.说它简单,是因为学会使用它只需片刻功夫:而说它复杂,是因为要真正掌握它则需要数年时间.实际上,前端工程师很大程度上就是指javascript工程师.前端入门容易精通难,说的是前端,更指的是javascript.本文是javascript基础语法的第一篇——词法结构 与java关系 关于javascript有这样一个说法,java和jav

java学习总结--2.基础语法

2.java基础语法  java基础语法和c语言有很多相同之处,因为java'作为后起之秀,借鉴了很多C.C++的语法 1.关键字goto和const不能在java中使用,是为了方便C和C++转换为java代码,如果转换的C和C++包含这两个单词会报编译错误   三个保留字false true null 2.标示符 1.标示符不能为关键字和保留字 2.只能包含字母数字下划线和美元符号$ 3.不能以数字开头 4,.区别大小写,没有规定长度 约定俗成的规则 首字母小写 变量名第一个单词首字母小写后面

Java基础知识二次学习-- 第二章 基础语法与递归补充

第二章 基础语法与递归补充   时间:2017年4月24日10:39:18 章节:02章_01节,02章_02节 视频长度:49:21 + 15:45 内容:标识符,关键字与数据类型 心得:由字母,下划线,$,数字组成,应该由字母,下划线$开头,同时应该避开java保留字符 变量是内存中的一小块区域,使用变量名来访问这块区域 执行过程中的内存管理(疑问:这里的内存和Jvm的一样吗?) code segment 存放代码 data segment 静态变量 字符串常量 stack 栈 局部变量 h

python之最强王者(2)——python基础语法

背景介绍:由于本人一直做java开发,也是从txt开始写hello,world,使用javac命令编译,一直到使用myeclipse,其中的道理和辛酸都懂(请容许我擦干眼角的泪水),所以对于python学习,直接使用pycharm IDE开发. 一.第一个python程序 按照套路,入我编程界的门,必须得遵守门规,先来个hello,world,先干为敬! 客官请看图: 运行结果如下图: 看到这里不知道你想说什么,但是我只能说 想一下,java写出一个hello,world得有main方法吧,这得

Python 基础语法

Python 基础语法 Python语言与Perl,C和Java等语言有许多相似之处.但是,也存在一些差异. 第一个Python程序 E:\Python>python Python 3.3.5 (v3.3.5:62cf4e77f785, Mar 9 2014, 10:37:12) [MSC v.1600 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "