golang 面向对象(一)继承

golang并非典型的面向对象语言,面向对象的特性不如java,c++那么明显。但是作为编程语言界最年轻的语言之一,还有一个牛逼的爹(他爹Google,,对,就是那个动不动搞个大新闻的Google),典型的富二代,golang对面向对象的支持也非常的好用,这篇文章,总结一些golang对面向对象的支持之-继承

一,继承 ,让我们来模拟下面这个场景:

 

老爸有一辆车(属性),并且有开车技能(函数)。

他生的儿子,自动继承老爸的财产车和技能开车。

不仅如此,时代在发展,儿子不仅有车,还有老爸没有的私人飞机和开飞机的技能。

package main

import "fmt"

type Father struct {
	name string
	age string
	Car struct {
		speed string // 车速
		brand string // 商标
	}
}

func (f *Father) Driver()  {
	fmt.Printf("I am a driver. I can drive car\n")
}

type Son struct {
	Father // 儿子,只需要在此处申明一个匿名father,就自动继承了老爸的一切

	Plane struct{  //儿子除了就开车,还会开私人飞机
		price string //价格
	}
}

func (s *Son)Fly()  {
	fmt.Println("I have another personal aircraft. I can fly!")
}

func main() {
	son := &Son{} // 注意,此处,如果我只是申明了一个变量var son *Son,下面的函数执行也是没有任何问题的,是不是很奇怪,一个空的结构体指针,下面的方法执行也不会报错。至于为什么,请看下一篇文章
	son.Driver() //这儿子,一出生就有了车,还会开
	son.Fly()
	/* *******running result********************
		I am a driver. I can drive car
		I have another personal aircraft. I can fly!
	 */
}

是不是很简单。

 

二,有了遗传(继承),自然少不了变异(函数,属性重写override)

假设上面的儿子(90后,有个性),开车,不想沿用老爸(70后)开车,老爸开的是解放牌手动驾驶,儿子买了辆特斯拉,谷歌自动驾驶的,看我们如何模拟这一场景

package main

import (
	"fmt"
)

type Father struct {
	name string
	age string
	Car struct {
		speed string // 车速
		brand string // 商标
	}
}

func (f *Father) Driver()  {
	fmt.Printf("I am a driver. I can drive car\n")
}


type Son struct {
	Father // 儿子,只需要在此处申明一个匿名father,就自动继承了老爸的一切
	name string
	Plane struct{  //儿子除了就开车,还会开私人飞机
		price string //价格
	}
}

func (s *Son) Driver()  {
	fmt.Println(s.name+" car. Google automatic driving")
}

func (s *Son)Fly()  {
	fmt.Println("I have another personal aircraft. I can fly!")
}

func main() {
	son := Son{name:"Tesla"}
	son.Driver() // 儿子可以开自己的特斯拉
	son.Father.Driver() // 也可以这样调用,开老爸的解放牌
	son.Fly()
	/* *******running result********************
		Tesla car. Google automatic driving
		I am a driver. I can drive car
		I have another personal aircraft. I can fly!
	 */
}

儿子重写(override)了老爸的name字段和Driver函数,并在默认调用son.Driver()中表现出自己独有的特性。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值