Golang|Go语言面向对象中的一些槽点

2019年12月9日 0 条评论 2.69k 次阅读 1 人点赞

Go语言中的面向对象与传统的的面向对象编程有些不同,我们不去谈论Go语言中没有传统编程语言定义类所用的class关键字,而是使用类似C系语言的结构体,更多的是类似于以下的特性

以下例举Go语言与传统编程语言面向对象中的几大不同之处

1.子类调用父类方法影响的成员变量保留在父类体内

2.接口与接口之间的继承

3.一个类能实现多个接口中的抽象方法

子类调用父类方法影响的成员变量保留在父类体内

比如:传统的子类继承父类后,当子类与父类有相同的成员属性或者方法时,实例化子类,子类的方法和属性会被重写,这意味着子类的成员属性会覆盖父类,但是Go语言却有明显的不同。

如下所示:

子类B继承了父类A,自然而然也继承了A类中的setName方法,但是在使用中的时候,请注意,B类调用setName方法,这个name属性值并没有被设置到B类中,可以很明显的看到是赋值到A类中了。

让我们进一步往下看

我们在子类B中将setName方法重写了,但是我们还是可以调用父类中的方法,给父类的成员属性name赋值

对以上一部分的总结:Golang中的继承,请先判断类中实现的方法是基于父类的继承还是子类自身实现的,如果是子类调用的方法继承于父类,那么该方法影响的成员属性,请去父类中查找。

其次谈谈接口与接口之间的继承

如下所示:

传统编程语言中,不存在接口被继承的说法,Go语言中,接口与接口之间还能继承,但是子接口继承父接口中不允许有相同的方法存在,即子接口不能重写父接口的抽象

一个类能实现多个接口中的抽象方法

从传统编程语言来看 ,一个类的定义只能实现一个接口内部的抽象方法,但是Go语言能让一个类实现多个接口

如下所示:

从以上代码可以看出,学生类实现了动物接口同时也实现了人类接口

兰陵美酒郁金香

大道至简 Simplicity is the ultimate form of sophistication.

文章评论(0)

你必须 登录 才能发表评论