golang有抽象类吗


今天小编给大家分享一下golang有抽象类吗的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。 golang没有抽象类。golang并不是面向对象(OOP)语言,没有类和继承的概念,也没有抽象类的概念;但golang中有结构体(struct)和接口(interface),可以通过struct和interface的组合来间接实现面向对象语言中的抽象类。在 Java 这种面向对象的语言中,抽象类和接口是我们经常会运用到的 2 种对抽象概念进行定义的机制。在 golang 中,没有类和继承的概念。golang 中有结构体(struct),和面向对象语言中的类相似。golang 中也有接口(interface),接口可以定义一组不含有具体实现的方法,其提供了一种方式来说明对象的行为。然而,在某些情况下,我们需要使用抽象类继承,来帮助我们写出更优雅的代码。可是在 golang 中又没有抽象类的概念,本文将介绍一种通过 struct 和 interface 来在 golang 中实现抽象类的方法。Golang中怎么实现抽象类下面我们会用 Java 语言作为示例,来看看如何在面向对象语言中实现抽象类。接着换 golang 语言,通过 struct 和 interface 来实现抽象类,完成相同的功能。面向对象语言中抽象类的实现假设我们需要实现下面这样的几个类(使用 Java 为例):

publicabstractclassGame
{
publicvoidplay()
{
System.out.println(this.name()+"isawesome!");
}
publicabstractStringname();
}
public免费云主机域名classDotaextendsGame
{
publicStringname()
{
return"Dota";
}
}
publicclassLOLextendsGame
{
publicStringname()
{
return"LOL";
}
}

我们定义了 Game 抽象类,在此类中定义了 public abstract String name(); 一个抽象方法和 public void play() 这样一个公开方法。然后我们定义了 Dota 和 LOL 2个类去继承 Game,并各自实现了 public String name()。接下来让我们看看如何在 golang 中实现抽象类。golang 中实现抽象类的方式定义 interface首先,我们需要将抽象方法定义在 interface 中。

typeIGameinterface{
	Name()string
}

定义”父类”然后,我们需要使用 struct 实现公共方法。

typeGamestruct{}
func(g*Game)play(gameIGame){
	fmt.Printf(fmt.Sprintf("%sisawesome!",game.Name()))
}

这里是重点,我们将 game IGame 传了进来。这样我们便可以调用”子类”的方法来获取名字。从而间接地实现了在公共方法中调用不同”子类”的实现的抽象方法。定义”子类”接着,我们再定义”Dota”和”LOL”这 2 个 struct 即可。

typeDotastruct{
Game
}
func(d*Dota)Name()string{
	return"Dota"
}
typeLOLstruct{
Game
}
func(l*LOL)Name()string{
	return"LOL"
}

大功告成现在,在初始化”Dota”和”LOL”结构体后,便可以调用 func (g *Game) play(game IGame) 方法了。

dota:=&Dota{}
dota.play(dota)

lol:=&LOL{}
lol.play(lol)

//输出:
//Dotaisawesome!
//LOLisawesome!

以上就是“golang有抽象类吗”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注百云主机行业资讯频道。

相关推荐: es6的set怎么使用

这篇文章主要讲解了“es6的set怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“es6的set怎么使用”吧! Set是一种用于存储有序数据数据结构,Set中的元素具有唯一性,不允许存储相同的元素;Se…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 03/06 17:00
下一篇 03/06 17:58

相关推荐