首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Golang OOP澄清

Golang OOP澄清
EN

Stack Overflow用户
提问于 2018-08-29 19:16:33
回答 4查看 673关注 0票数 2

我有两个用go编写的接口,一个是另一个的子集

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type x interface {
    a()
}

type y interface {
    a()
    b()
}

我还有一个具有如下方法的结构

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type z struct {
    some string
}

func (s z) a() {
    // do stuff
}

func (s z) b() {
    // do stuff
}

我对此有几个问题,即:

  1. 我说得对吗,z同时实现了x和y?
  2. 以这种方式实现多个接口的一个结构的OOP概念是什么?

我试着问了几个同事,他们似乎倾向于把polymorphism作为答案,尽管他们不太确定。多态的维基百科条目说它“是为不同类型的实体提供单一接口”,但这对我来说是一种直接的相反。我还在其他来源找到了(如。)是“并不是一个真正的OOP语言”。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-08-29 20:27:19

是的,z实现了xy。您可以通过使用变量声明将具体类型分配给接口类型来证明这一点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var _ x = z{}
var _ y = z{}

这将为您提供一个编译时间检查,以确保某个类型实现了您希望它实现的接口。

顺便提一句,如果您明确希望y成为x + some more methods,那么将它写成这样是有意义的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
interface y {
    x
    b()
}

关于命名,如果一个类型实现了两个共享某些方法的不同接口,我就称之为它--一个实现两个不同接口的类型。一个接口是另一个接口的子集并不重要。

此外,在Go中,类型(也是非结构类型)在定义接口时不与接口关联。即使类型不是为了实现某些接口而编写的,您也可以通过定义具有不同名称和/或与类型不同的方法组合的新接口来使其实现任意数量的接口。这使得给这个概念命名更加困难--在定义类型时,当接口可能稍后在另一个包中定义时,您如何知道名称?

票数 7
EN

Stack Overflow用户

发布于 2018-08-29 20:40:06

一开始,我很难掌握Go接口的窍门。我来自爪哇,C++,Python的多年经验.IMHO最大限度地利用Go和任何其他新语言的最佳方法是不使用Go语法编写Java或C++。了解事物是如何运作的,并加以利用。术语可能不是精确的1到1映射,这并不重要。

将Go接口看作一组在某些数据组(struct)上操作的方法签名。类似于Java接口只是类上的一组方法签名。主要的区别是,在Go中,您不需要指定结构implements (一个接口),语言将为您完成这一任务。如果在结构上指定方法,它将自动实现接口。

票数 2
EN

Stack Overflow用户

发布于 2018-08-29 20:42:45

您正确地说,z实现了这两个接口。

接口本身是一个通用的编程概念,而不是面向对象语言的泛泛性概念。一些面向对象的语言(如Java和Go )提供了一种定义和实现接口的方法,而其他语言则没有。

实际上,它是一种多态类型,因为您是说一组特定的函数或方法可以通过不同的数据结构类型来实现。正如维基百科的文章所暗示的。它也可以被认为是类型抽象。

Go能够支持面向对象和面向过程的编程风格。它被认为是一种面向对象的编程语言。

Go是一种强类型语言,接口允许Go程序员通过其方法定义类型,以及通过数据结构定义类型的其他方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52088759

复制
相关文章
OOP in Javascript
写了几篇Vue入门的内容了,今天写点其它的放松一下,简单讲讲javascript中的面相对象。 在面向对象的语言中,都有类的概念,当然es6中开始javascript中也有类的概念了,这里以es5为基础开始讲解,毕竟当前即使写的es6代码,一般还是会通过babel等转码器翻译到es5来执行的; 在js中虽然没有类的概念,但是我们却可以创建对象,一般创建对象有两种方式(这里指自定义对象): 1、使用构造函数 function Person(){ } var p=new Person(); 2、使用字面量
Jerremy
2018/06/13
4900
关于Windows内存的几个概念澄清
狭义的虚拟内存是分页文件pagingfile,通过SystemPropertiesPerformance.exe /pagefile命令设置pagingfile大小
Windows技术交流
2021/12/25
2.4K0
C# OOP
(1). 封装:将一些行为以类为单位进行包裹起来,然后通过类进行调用(如People类),可以利用private、public、protected灵活控制属性的可访问性。
明志德道
2023/10/21
1900
C#  OOP
AOP与OOP
面向对象的编程(OOP)方法是在面向过程的编程方法基础上进行的改进,而面向方面编程(AOP)方法又是在面向对象编程(OOP)方法的基础上进行改进而来的一种创新的软件开发方法。
黄规速
2022/04/14
5010
C++ OOP思想
oop思想
lexingsen
2022/02/24
4580
C++ OOP思想
java学习:OOP入门
有c#基础的程序员,学习java其实很容易上手,绝大多数语法基本相同,概念也接近 1、属性 java中没有象c#中的Property概念,只有set,get方法 package jmyang.oop; public class Animal {     private String _name;     public Animal(){         System.out.println("Animal的构造函数被调用!");     }     public void eat(){         Sy
菩提树下的杨过
2018/01/24
7390
Python OOP-1
0. OOP-Python面向对象 Python面向对象 面向对象编程 基础 公有私有 继承 组合,Mixin 魔法函数 魔法函数概述 构造类魔法函数 运算类魔法函数 1. 面向对象概述(ObjectOriented, OO) OOP思想 接触到任意一个任务,首先想到的是任务这个世界的构成,是由模型构成的 几个名词 OO:面向对象 OOA:面向对象的分析 OOD:面向对象的设计 OOI:面向对象的实现 OOP:面向对象的编程 OOA->OOD->OOI:面向对象的实现过程 类和对象的概念 类:抽象名词,代表
ruochen
2021/02/26
6720
Python  OOP-1
Java面向对象OOP
(1)、单一职责原则(Single Responsibility Principle)
用户2802329
2018/08/07
4850
澄清学习编程的10大误区
在编程行业,一直流传着很多误区。下面让我们一起来纠正10个有关编程的常见误区,以帮助编程初学者或有志成为程序员的人,更理性地认识编程。
LiveEdu
2018/05/21
8030
澄清学习编程的10大误区
面向对象编程(OOP)
这节讲一下,什么是面向对象(Object Oriented Programming)。说面向对象之前,我们不得不提的是面向过程(Process Oriented Programming),C语言就是面向过程的语言,这两者的区别在哪呢?我们可以设想一个情景——厨房做菜:
宿春磊Charles
2022/03/29
4850
面向对象编程(OOP)
Python OOP-4
8. 类的成员描述符(属性) 类的成员描述是为了在类中对类的成员属性进行相关操作而创建的一种方式 get:获取属性的操作 set:修改或添加属性操作 delete:删除属性的操作 如果想使用类的额成员描述符,大概有三种方法 使用类实现描述器 使用属性修饰符 使用property函数 property函数很简单 property(fget, fset, fdel, doc) 无论哪种修饰符都是为了对成员属性进行相应的控制 类的方式:适用多个类中的多个属性共用同一个描述符 property:适用当前类中使用,可
ruochen
2021/03/01
3980
Python  OOP-4
python的OOP机制
在Python中,实际上一切都是对象,我们使用的内置数据类型,本质上也是类的实例化。例如:
zy010101
2021/12/28
4220
python的OOP机制
Python OOP-3
6.3 多态 多态就是同一个对象在不同情况下有不同的状态出现 多态不是语法,是一种设计思想 多态性:一种调用方式,不同的执行效果 多态:同一事物的多种形态,动物分为人类、猪类、狗类 多态和多态性 Mixin设计模式 主要采用多继承方式对类的功能进行扩展 Mixin概念 MRO and Mixin Mixin模式 Mixin MRO MRO 我们使用多继承语法来实现Mixin 使用Mixin实现多继承的时候非常小心 首先他必须表示某一单一功能,而不是某个物品 职责必须单一,如果有多个功能,则写多个Mixin
ruochen
2021/02/28
5880
Python  OOP-3
83-OOP基础
为玩具厂创建一个玩具熊类。 玩具熊有名字、尺寸、颜色这些数据属性;还有唱歌、说话的行为。
凯茜的老爸
2018/09/11
3710
社群经济与粉丝经济:误解和澄清
    胡泳 北京大学新闻与传播学院教授     宋宇齐 北京大学新闻与传播学院研究生    随着社会交流方式特别是网络的发展,社群的涵义产生了极大的变化。经典理论下的社群有一定的特点和限制条件,诸如:社群内成员的构成要以一定的社会关系作为基础;其成员从事的社会活动有一定的地域限制;社群内部应形成一定的文化,并能使社群成员产生归属感与认同感;同时,社群的建立与维护需要一定的基础设施。但在互联网时代,交流与沟通打破了原有的时空限制,使得社群可以不依托现实社会中的某些条件而建立。在地域上,因为互联网的
腾讯研究院
2018/03/06
1.2K0
社群经济与粉丝经济:误解和澄清
85-OOP之继承
如果两个类有很多相同之处,使用继承更为合理。 新品玩具熊增加了一个跑的行为,其他与原来的玩具熊一致。
凯茜的老爸
2018/09/11
3940
关于F统计量的澄清
在孟德尔随机化研究中,弱工具变量偏倚(weak instrument bias)是需要我们认真对待的一个问题,它通常是因为样本量较小导致的。在往期推送中,米老鼠和大家介绍过评价弱工具变量偏倚的策略------孟德尔随机化之F统计量。一般而言,当F 统计量大于经验值10时,我们认为工具变量法估计值的偏倚大约是观察性研究的10%,因此F大于10这个标准在孟德尔随机化研究中广为使用。然而,这样的盲目使用不见得是合理的。
生信与临床
2022/08/21
2.6K0
关于F统计量的澄清
Python OOP-5
12. 所用软件 画图软件:Faststone capture 13. 抽象类 抽象方法:没有具体实现内容的方法称为抽象方法 抽象方法的主要意义是规范了子类的行为和接口 抽象的使用需要借助abc模块 import abc 抽象类:包含抽象方法的类叫做抽象类,通常成为ABC类 抽象类的使用 抽象类可以包含抽象方法,也可以包含具体方法 抽象类中可以有方法也可以有属性 抽象类不允许直接实例化 必须继承才可以使用,且继承的子类必须实现所有继承来的抽象方法 假定子类没有实现所有继承的抽象方法,子类也不能实例化
ruochen
2021/03/02
8060
Python  OOP-5
Java OOP 式编程
我们知道 OOP的三大特性分别是封装,继承,多态,接下来我就以几个简单的实例展示Java的面向对象的特性以及示例代码
Gorit
2021/12/09
3430
Java OOP 式编程
Python OOP-2
可以使用 [父类名.父类成员] 的格式来调用父类成员,也可以使用[super().父类成员]的
ruochen
2021/02/27
4150
Python  OOP-2

相似问题

对C# OOP的澄清

12

Golang OOP信息隐藏实践

10

请求澄清PHP中的OOP过程

34

需要澄清如何使用golang中的上下文包

17

需要澄清的帮助- C# / OOP /继承/多态性/多重继承

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文