golang的面向对象实现

GoLang的面向对象

通过golang实现面向对象的过程, 以及golang的继承关系

定义了动物, 定义了鸟类,鱼类, 最后的对象是 燕子, Nimo

package main

import "fmt"

type Animal interface {
    Eat()
    Play()
}
type animal struct {
    name string
}

type Bird interface {
    Animal //匿名嵌入接口
    Fly()
}

type bird struct {
    animal //匿名嵌入继承父亲的name
    wings  int
}

type Fish interface {
    Animal
    Swim()
}

type fish struct {
    animal //集成父亲的name
    name   string
    fin    int
}

func (a *animal) Eat() {
    fmt.Println(a.name, "is eatting now")
}

func (a *animal) Play() {
    fmt.Println(a.name, "is playing now")
}

func (b *bird) Fly() {
    fmt.Println(b.name, "is flying now")
}

func (b *bird) Eat() { // 重写了父亲的吃的方法
    fmt.Println(b.name, "is eatting too much")
}

func (f *fish) Swim() {
    fmt.Println(f.name, "is swimming now")
}

func (f *fish) Eat() {
    fmt.Println(f.name, "is etting now")
}

func main() {
    fmt.Println("hello golang oo")

    bird := bird{animal{"swallow"}, 2}

    bird.Fly() // bird的特有方法,    "swallow is flying now"
    bird.Eat() //重写了父亲的方法,  "swallow is eatting too much"

    fish := fish{animal{"Clown Fish"}, "Nimo", 3}

    fish.Play() // 继承父亲的方法, "Clown Fish is playing now", 父亲的name
    fish.Eat()  // 重写父亲的方法, "Nimo is etting", 用父亲的name
    fish.Swim() // fish 特有的方法 "Nimo is swimming now";
}

原文地址:https://www.cnblogs.com/gpan/p/9860586.html

时间: 2024-11-05 21:44:13

golang的面向对象实现的相关文章

个人对golang的面向对象的理解------接口(interface)

golang是面向对象语言,但是他并没有class之类的关键字,他是通过struct和interface组合实现了面向对象的概念. 转载请注明出处:http://www.cnblogs.com/SSSR/p/6351661.html 在golang中面向对象的实现顺序: 1.先定义struct,是对象的属性值,如: type Person struct { id int name string} 2.定义对象需要实现的函数,如: func (self Person) codingEveryday

Go_15:GoLang中面向对象的三大特性

有过 JAVA 语言学习经历的朋友都知道,面向对象主要包括了三个基本特征:封装.继承和多态.封装,就是指运行的数据和函数绑定在一起,JAVA 中主要是通过 super 指针来完成的:继承,就是指 class 之间可以相互继承属性和函数:多态,主要就是用统一的接口来处理通用的逻辑,每个 class 只需要按照接口实现自己的回调函数就可以了. 作为集大成者的 Go 语言,自然不会在面向对象上面无所作为.相比较 java.C#.C++ 等面向对象语言而言,它的面向对象更简单,也更容易理解.下面,我们不

GoLang中面向对象的三大特性

有过 JAVA 语言学习经历的朋友都知道,面向对象主要包括了三个基本特征:封装.继承和多态.封装,就是指运行的数据和函数绑定在一起,JAVA 中主要是通过 super 指针来完成的:继承,就是指 class 之间可以相互继承属性和函数:多态,主要就是用统一的接口来处理通用的逻辑,每个 class 只需要按照接口实现自己的回调函数就可以了. 作为集大成者的 Go 语言,自然不会在面向对象上面无所作为.相比较 java.C#.C++ 等面向对象语言而言,它的面向对象更简单,也更容易理解.下面,我们不

『GoLang』面向对象

我们总结一下前面看到的:Go 没有类,而是松耦合的类型.方法对接口的实现. 面向对象语言最重要的三个方面分别是:封装,继承和多态,在 Go 中它们是怎样表现的呢? Go实现面向对象的两个关键是struct和interface,结构代替类,因为Go语言不提供类,但提供了结构体或自定义类型,方法可以被添加到结构体或自定义类型中.结构体之间可以嵌套,类似继承.而interface定义接口,实现多态性. 封装(数据隐藏) 和别的面向对象语言有 4 个或更多的访问层次相比,Go 把它简化为了 2 层: 包

GoLang之对象

GoLang之面向对象 Go语言没有沿袭传统面向对象编程中的诸多概念,比如继承.虚函数.构造函数和析构函数.隐藏的this指针等. 类方法 在Go语言中,可以给任意类型(包括内置类型,但不包括指针类型)添加相应的方法. 如下面的这个例子,定义了一个新类型Integer,它和int一样,只是为它内置的int类型增加了个新方法Less() type Integer int func (a Integer) Less(b Integer) bool { return a < b } func main

golang context

1. 内部结构之 - timerCtx . type timerCtx struct { cancelCtx timer *time.Timer // Under cancelCtx.mu. deadline time.Time } - 里面有一个 timer,用来触发超时之后的 回调函数,也就是超时之后,帮你 cancel 一下.理论上,你不用在结构体里存一份这个,这里存了这个指针,主要是用来取消这个定时触发,基本上就是因为一个定时器你如果不需要了,就要马上回收这个资源,否则会很耗资源的.例如

golang精选100题带答案

能力模型 级别 模型 初级 primary 熟悉基本语法,能够看懂代码的意图: 在他人指导下能够完成用户故事的开发,编写的代码符合CleanCode规范: 中级 intermediate 能够独立完成用户故事的开发和测试: 能够嗅出代码的坏味道,并知道如何重构达成目标: 高级 senior 能够开发出高质量高性能的代码: 能够熟练使用高级特性,开发编程框架或测试框架: 选择题 [初级] 下面属于关键字的是() A. func B. def C. struct D. class 参考答案:AC [

Golang精编100题-搞定golang面试

Golang精编100题 能力模型 级别 模型 初级 primary 熟悉基本语法,能够看懂代码的意图:在他人指导下能够完成用户故事的开发,编写的代码符合CleanCode规范: 中级 intermediate 能够独立完成用户故事的开发和测试:能够嗅出代码的坏味道,并知道如何重构达成目标: 高级 senior 能够开发出高质量高性能的代码:能够熟练使用高级特性,开发编程框架或测试框架: 选择题 1.   [初级]下面属于关键字的是()A. funcB. defC. structD. class

面向对象之结构体1

Golang语言面向对象编程说明: 1)Golang也支持面向对象编程(OOP),但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言.所以我们说Golang支持面向对象编程特性是比较准确的. 2)Golang没有类(class),Go语言的结构体(struct)和其它编程语言的类(class)有同等的地位,你可以理解Golang是基于struct来实现OOP特性的. 3)Golang面向对象编程非常简洁,去掉了传统OOP语言的继承.方法重载.构造函数和析构函数.隐藏的this指针等等. 4