go interface理解

如果一只鸟长得像鸭子,走起路来像鸭子,叫起来也像鸭子,那么就把这只鸟叫做鸭子;

golang中的interface就是上面这个意思,如果你定义了一个struct,它里面的方法和属性都和interface中的一样,那么可以说,这个struct实现这个interface,上代码

package main

import (
	"fmt"
)

type s struct { //定义一个s类型,有一个属性i是int的
	i int
}

func (this *s) Get() int { //Get方法获得i属性
	return this.i
}

func (this *s) Put(v int) { //Put方法设置i属性
	this.i = v
}

type I interface { //定义一个接口类型,里面有Get方法与Put方法
	Get() int
	Put(int)
}

func main() {
	var S s //申请一个S变量,他是s类型的值
	f(&S)
}

func f(my I) {//这里的my保存了接口类型的值,因为s实现了I,所以传递的my虽然是个I类型,但是可以当作s类型来使用
	my.Put(999)
	fmt.Println(my.Get())
}
时间: 2024-11-07 16:21:20

go interface理解的相关文章

interface理解一

很高兴能和大家一起来分享一下,最近我对interface的理解,这次的感悟主要来源于在编程实践中interface的学习与运用过程,最后我们会将Interfac与日常生活工作中交流相结合. 以前上课听老师讲过面向接口编程这个概念,那时只是有点印象,懵懵懂懂的,在不断的编程实践中,最后终于对它有个深刻的理解.我为什么要讲这件事呢?我只是觉得<思考的艺术>中有句话说得很有道理,大概意思是讲,当你遇到不懂的东西的时候,不妨让它在脑子里发酵发酵,等时机差不多的时候你自然就理解了,interface可以

OC中的@interface和java中的区别以及 @implementation @protocol

java 在java中的interface是‘接口’的意思,而java的类声明用class,即接口用interface声明,类是用class声明,是两个独立的部分. 只有在类声明要实现某个接口时,他们两者才建立了关系,例如: [html] view plaincopyprint? interface AI{ void print(); }; class AC{ }; 这时候,AI和AC是独立存在,AC不会因为没有和AI建立关系而编译错误,将AC做以下修改后,AI才和AC建立了关系,AC必须实现A

TypeScript - Interfaces

简介 关注于数据值的 ‘shape’的类型检查是TypeScript核心设计原则.这种模式有时被称为‘鸭子类型’或者‘结构子类型化’. . 在TypeScript中接口interfaces的责任就是命名这些类型,而且还是你的代码之间或者是与外部项目代码的契约. 初见Interface 理解interface的最好办法,就是写个hello world程序: function printLabel(labelledObj: {label: string}) { console.log(labelle

个人对golang的面向对象的理解------接口(interface)

golang是面向对象语言,但是他并没有class之类的关键字,他是通过struct和interface组合实现了面向对象的概念. 转载请注明出处:http://www.cnblogs.com/SSSR/p/6351661.html 在golang中面向对象的实现顺序: 1.先定义struct,是对象的属性值,如: type Person struct { id int name string} 2.定义对象需要实现的函数,如: func (self Person) codingEveryday

深入理解abstract class和interface

Abstract class Interface 实例化 不能 不能 类 一种继承关系,一个类只能使用一次继承关系.可以通过继承多个接口实现多重继承 一个类可以实现多个interface 数据成员 可有自己的 静态的不能被修改即必须是static final,一般不在此定义 方法 可以私有的,非abstract方法,必须实现 不可有私有的,默认是public,abstract 类型 变量 可有私有的,默认是friendly 型,其值可以在子类中重新定义,也可以重新赋值 不可有私有的,默认是pub

Java注释@interface的用法【转】 --好文章 很好理解

java用  @interface Annotation{ } 定义一个注解 @Annotation,一个注解是一个类. @Override,@Deprecated,@SuppressWarnings为常见的3个注解. 注解相当于一种标记,在程序中加上了注解就等于为程序加上了某种标记,以后, JAVAC编译器,开发工具和其他程序可以用反射来了解你的类以及各种元素上有无任何标记,看你有什么标记,就去干相应的事. 注解@Override用在方法上,当我们想重写一个方法时,在方法上加@Override

深入理解abstract class和interface(转)

原文地址 深入理解abstract class和interface java提高篇(四)-----抽象类与接口

理解Go Interface

理解Go Interface 1 概述 Go语言中的接口很特别,而且提供了难以置信的一系列灵活性和抽象性.接口是一个自定义类型,它是一组方法的集合,要有方法为接口类型就被认为是该接口.从定义上来看,接口有两个特点: 接口本质是一种自定义类型,因此不要将Go语言中的接口简单理解为C++/Java中的接口,后者仅用于声明方法签名. 接口是一种特殊的自定义类型,其中没有数据成员,只有方法(也可以为空). 接口是完全抽象的,因此不能将其实例化.然而,可以创建一个其类型为接口的变量,它可以被赋值为任何满足

Java的接口Interface和接口实现Implentmens的理解

长期从事CS的开发,从2005年开始买Java的书籍到现在9年了,一直都是门外汉,什么时候可以达到我CS开发中信手拈来,游刃有余的境界,必须得坚持和奋斗,因为除了这个别的我什么也不会. 我多做一点,月月就多点台阶. 首先 Interface也是Java的一种类. Java类不能多继承,但是可以实现多个Interface. 如果有多个不同的对象要实现某个相同的功能,那么可以先把这个功能抽象为一个接口. 如何判断由哪种具体的对象来实现这个接口功能呢,可以写一个判断类,由这个判断类读取配置文件的标识信