内容简介:和其他高级语言一样,golang 也支持面向对象编程,支持得比较简单,有些特性并不支持,但是够用了接口接口使用 interface 关键字声明,任何实现接口定义方法的类都可以实例化该接口,接口和实现类之间没有任何依赖,你可以实现一个新的类当做 Sayer 来使用,而不需要依赖 Sayer 接口,也可以为已有的类创建一个新的接口,而不需要修改任何已有的代码,和其他静态语言相比,这可以算是 golang 的特色了吧
和其他高级语言一样,golang 也支持面向对象编程,支持得比较简单,有些特性并不支持,但是够用了
接口
接口使用 interface 关键字声明,任何实现接口定义方法的类都可以实例化该接口,接口和实现类之间没有任何依赖,你可以实现一个新的类当做 Sayer 来使用,而不需要依赖 Sayer 接口,也可以为已有的类创建一个新的接口,而不需要修改任何已有的代码,和其他静态语言相比,这可以算是 golang 的特色了吧
type Sayer interface {
Say(message string)
SayHi()
}
继承
继承使用组合的方式实现
type Animal struct {
Name string
}
func (a *Animal) Say(message string) {
fmt.Printf("Animal[%v] say: %v\n", a.Name, message)
}
type Dog struct {
Animal
}
Dog 将继承 Animal 的 Say 方法,以及其成员 Name
覆盖
子类可以重新实现父类的方法
// override Animal.Say
func (d *Dog) Say(message string) {
fmt.Printf("Dog[%v] say: %v\n", d.Name, message)
}
Dog.Say 将覆盖 Animal.Say
多态
接口可以用任何实现该接口的指针来实例化
var sayer Sayer
sayer = &Dog{Animal{Name: "Yoda"}}
sayer.Say("hello world")
但是不支持父类指针指向子类,下面这种写法是不允许的
var animal *Animal
animal = &Dog{Animal{Name: "Yoda"}}
同样子类继承的父类的方法引用的父类的其他方法也没有多态特性
func (a *Animal) Say(message string) {
fmt.Printf("Animal[%v] say: %v\n", a.Name, message)
}
func (a *Animal) SayHi() {
a.Say("Hi")
}
func (d *Dog) Say(message string) {
fmt.Printf("Dog[%v] say: %v\n", d.Name, message)
}
func main() {
var sayer Sayer
sayer = &Dog{Animal{Name: "Yoda"}}
sayer.Say("hello world") // Dog[Yoda] say: hello world
sayer.SayHi() // Animal[Yoda] say: Hi
}
上面这段代码中,子类 Dog 没有实现 SayHi 方法,调用的是从父类 Animal.SayHi,而 Animal.SayHi 调用的是 Animal.Say 而不是Dog.Say,这一点和其他面向对象语言有所区别,需要特别注意,但是可以用下面的方式来实现类似的功能,以提高代码的复用性
func SayHi(s Sayer) {
s.Say("Hi")
}
type Cat struct {
Animal
}
func (c *Cat) Say(message string) {
fmt.Printf("Cat[%v] say: %v\n", c.Name, message)
}
func (c *Cat) SayHi() {
SayHi(c)
}
func main() {
var sayer Sayer
sayer = &Cat{Animal{Name: "Jerry"}}
sayer.Say("hello world") // Cat[Jerry] say: hello world
sayer.SayHi() // Cat[Jerry] say: Hi
}
添加客服微信:grey0805,共享更多精彩
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 谈谈面向对象的三大特性
- 再说Python面向对象的三大特性
- 深入理解Python面向对象的三大特性
- 2.1.1 Python面向对象三大特性
- 探讨 Go语言之面向对象特性:多态 设计思路和实际编程
- 面向Python,面向对象(基础)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
计算群体智能基础
恩格尔伯里特 / 谭营 / 2009-10 / 69.00元
《计算群体智能基础》全面系统地介绍了计算群体智能中的粒子群优化(PSO)和蚁群优化(ACO)的基本概念、基本模型、理论分析及其应用。在简要介绍基本优化理论和总结各类优化问题之后,重点介绍了社会网络结构如何在个体间交换信息以及个体聚集行为如何形成一个功能强大的有机体。在概述了进化计算后,重点论述了粒子群优化和蚁群优化的基本模型及其各种变体,给出了分析粒子群优化模型的一种通用方法,证明了基于蚂蚁行为实......一起来看看 《计算群体智能基础》 这本书的介绍吧!
HTML 压缩/解压工具
在线压缩/解压 HTML 代码
RGB HSV 转换
RGB HSV 互转工具