两分钟让你明白Go中如何继承

  • 时间:
  • 浏览:0

随后随便搜了一下关于Go继承的文章,发现有的文章的代码量不多,随后代码format极其粗糙,命名极其随意,这类于于A、B这人,我能 看着看着就忘了到底是谁继承谁,我又要回去看过逻辑。

还是引用我随后博客中一直写的话语

举个例子,我随后是这人抽象类的使用者,我拿到animal类只有一目了然的知道这人类干了哪此,有哪此法子可不都要调用。以及,越来越统一的初始化法子,这意味着分析凡是涉及到初始化的地方也有有重复代码。随后后期有初始化相关的修改,越来越只有一有有六个一有有六个挨着改。不多接下来,这人人 儿对上述的代码做这人优化。

接口用于描述某个类的行为。这类于,这人人 儿即将要抽象的动物接口就会描述作为一有有六个动物,具有哪此行为。常识问这人人 ,动物可不都要进食(Eat),可不都要发出声音(bark),可不都要移动(move)等等。这里有一有有六个很有意思的移就。

你看过这人招牌会想到哪此?美式?星冰乐?抹茶拿铁?又随后是拿铁,甚至是店内的装修风格。

熟悉Go的人看过上方的代码以前会发出如下感叹

这不多我我认为优化的随后要面临的几次哪此的问提:

在这人函数中就可不都要防止所有组合了Animal的单位类型,对应到Java中不多我上界通配符,即一有有六个可不都要防止任何特定类型以及是该特定类型的派生类的通配符,再换句人话,啥动物都能防止。

说到继承这人人 儿都知道,在Go中越来越extends关键字,也就意味着分析Go并越来越原生级别的继承支持。这也是为哪此我在文章开头用了伪继承这人词。本质上,Go使用interface实现的功能叫组合,Go是使用组合来实现的继承,说的更精确这人,是使用组合来代替的继承,举个很简单的例子。

随后在这里这人人 儿实现子类Cat,使用组合的法子代替继承,来调用Animal中的法子。运行随后这人人 儿可不都要看过,Cat形态学 体中并越来越Name字段,也越来越实现Eat法子,随后仍然可不都要正常运行。这证明这人人 儿随后通过组合的法子了实现了继承。

这不多我一有有六个好的接口应该达到的效果,同样这也是为哪此这人人 儿都要抽象接口。

而在Go中,就十分方便了。

最后,声明了一有有六个Cat形态学 体,组合了Cat字段。再实例化一有有六个猫,调用Eat法子,可不都要看过会正常的输出。

凡事也有两面性,做优化不多我例外。极少量的抽象接口的确可不都要精简代码,让代码看起来十分优雅、舒服。随后同样,这会给这人夹生悉的人review代码造成理解成本。想象你看某段代码,也有接口,点了好几层并能看过实现。更有的,往下找着找着一直就在原本接口处断掉了,都要要手动的去原本注册的地方去找。

有的随后这人人 儿太难做到一有有六个方面都兼顾,这类于原本写代码看起来太难受,随后性能要比优雅的代码好。再这类于,原本写看起来很优雅,随后可读性很差等等。

的确,上方的仅仅是为了给还越来越了解过Go组合的人看的。作为一有有六个简单的例子来理解Go的组合继承,这是删改越来越哪此的问提的 。但以前会运用在真正的开发中,那还是远远欠缺的。

这也太粗 糙了吧 -- By 鲁迅:我没说过这句话

可不都要看过,Cat形态学 体一种越来越Name字段,也越来越去实现Eat法子。唯一有的不多我组合了Animal父类,至此,这人人 儿就证明了随后通过组合实现了继承。

微信公众号: SH的全栈笔记(或直接在换成公众号界面搜索微信号LunhaoHu)

最近在重构代码的随后,抽象了极少量的接口。也使用哪此抽象的接口做了不多伪继承的操作,极大的减少了代码冗余,一并也增加了代码的可读性。

可不都要看过,Cat形态学 体随后重载了Animal中的Eat法子,原本就实现了重载。

随后,实现了一有有六个以Animal为receiver的Eat法子,来描述动物进食的行为。

实在不多我样例代码,我认为仍然都要做到简洁、清晰以及明了。这也是我为哪此要写这篇博客的意味着。接下里在这里简单分享一下在Go中怎么才能 才能 实现继承。

哪此意思呢?举个例子,这人人 儿要怎么才能 才能 在Java中防止函数的参数多态哪此的问提?熟悉Java的以前会想到一种防止方案,那不多我通配符。用话语概括,使用了通配符可不都要使该函数接收某个类的所有父类型随后某个类的所有子类型。随后我买车人认为对于夹生悉Java的人来说,可读性也有不得劲友好。

适合买车人的才是最好的

这人随后只有根据买车人项目的特定情况报告,选择最适合你的防止方案。越来越万能的防止方案。

这人人 儿用很容易理解的动物-来举例子,废话不多说,直接看代码。

在Go中实在越来越关于构造函数的定义。这类于这人人 儿在Java中可不都要使用构造函数来初始化变量,举个很简单的例子,Integer num = new Integer(1)。而在Go中就都要使用者买车人通过形态学 体的初始化来模拟构造函数的实现。

首先,这人人 儿实现了一有有六个Animal的形态学 体,代表动物类。并声明了Name字段,用于描述动物的名字。

接口就像是一有有六个招牌,比如一家星巴克。星巴克不多我一有有六个招牌(接口)。