Go面向对象-拓展和多肽

目录

一、Go的拓展与复用

1、Go是否支持继承呢?

2、探究 Go 是否支持继承

场景设定

示意图

运行结果

二、多肽

1、场景

2、示意图

3、调试结果


一、Go的拓展与复用

1、Go是否支持继承呢?

先说结论不支持

2、探究 Go 是否支持继承

场景设定

我们设定一个父结构体 Pet(宠物),和子结构体 Dog(狗);

Pet 实现了 speak() 方法和 speakTo() 方法;

如果 Dog 能够继承 Pet 并重写了 speak() 方法,根据 LSP 的原则,那么输出结果应该是 Dog speak()方法的结果。

示意图

运行结果

package extension

import (
	"fmt"
	"testing"
)

//定义父级的数据结构(Pet)
type Pet struct {

}

//父级有一个speak()方法
func (pet * Pet) speak()  {
	fmt.Println("Pet的speak()方法")
}

//父级有还有一个speakTo()方法,它调用了父级的 speak() 方法
func (pet * Pet) speakTo() {
	pet.speak()
	fmt.Println("Pet的其它代码")
}



//定义子集的数据结构(Dog)
type Dog struct {
	//Go 语言提供了一种匿名嵌套类型,可以直接声明父级的数据结构
	Pet
}

//在Dog中重写了Pet的speak()方法
func (dog *Dog) speak()  {
	fmt.Println("Dog的speak()方法")
}

//测试 Go 是否支持继承
//根据 LSP 原则,调用父类中的方法,如果子类中重写了父类的方法,那么会自动调用子类中的同名函数。
//如果 Go 支持继承,那么此处的输出应该为Dog的speak()方法输出的结果。
//根据代码运行结果,我们得知 Go 不支持继承
func TestClient(t *testing.T)  {
	dog := new (Dog)
	dog.speakTo()

	//输出结果:
	//Pet的speak()方法
	//Pet的其它代码
}

重点Go语言提供了一种匿名嵌套类型,可以在子结构体中直接声明父级的数据结构

结论Go不支持继承

二、多肽

虽然 Go 对 interface 的实现和其它主要编程语言完全不同,但是并不影响 Go 对多肽的支持。

1、场景

有一个编程语言的接口 (Programmer),接口中有一个需要实现的方法 WriteHelloWorld() 

分别用 Go 和 PHP 来实现这个 HelloWorld() 方法。

2、示意图

3、调试结果

package peptides

import "testing"

//Programmer 接口
type Programmer interface {
	WriteHelloWorld() string
}

//GoProgrammer结构体
type GoProgrammer struct {
	name string
}
//GoProgrammer 实现 WriteHelloWorld() 方法
func (goPro *GoProgrammer) WriteHelloWorld() string {
	return "Go print Hello World"
}

//PhpProgrammer 结构体
type PhpProgrammer struct {

}
//PhpProgrammer 实现 WriteHelloWorld() 方法
func (php *PhpProgrammer) WriteHelloWorld( ) string {
	return "PHP echo Hello World"
}

//如果Go支持多肽,那么 GoProgrammer 和 PhpProgrammer 会各自输出各自的结果
func TestClient(t *testing.T)  {
	goPro := new (GoProgrammer)
	php := new (PhpProgrammer)

	//Go print Hello World
	t.Log(goPro.WriteHelloWorld())
	//PHP echo Hello World
	t.Log(php.WriteHelloWorld())
}

结论Go支持多肽

:这篇博文是我学习中的总结,如有转载请注明出处:

https://blog.csdn.net/DaiChuanrong/article/details/118095783

上一篇Go面向对象-接口

下一篇Go-错误处理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值