美文网首页
Go封装、继承、多态

Go封装、继承、多态

作者: 陈光环_18 | 来源:发表于2021-03-28 11:10 被阅读0次

封装

封装主要是通过访问权限控制实现的。

在Java中,共有public 、protected、default、private这四种权限控制。

而相应的在golang中,是通过约定来实现权限控制的。变量名首字母大写,相当于java中的public,首字母小写,相当于private。同一个包中访问,相当于default。由于go没有继承,也就没有protected。

继承

虽然golang的语法没有继承,但是可以通过相应的结构体之间的组合来实现类似的继承效果。

例子如下:

package main

import "fmt"

type inner struct {

    i string

}

func (in *inner) innerMethod() {

    fmt.Println("inner's innerMethod!!!")

}

type outter struct {

    s1 string

    s2 int

    s3 bool

    inner

}

func main() {

    o := new(outter)

    fmt.Printf("o.i %v\n", o.i)

    o.i = "inner"

    fmt.Printf("o.i %v\n", o.i)

    o.innerMethod()

}

输出结果

o.i

o.i inner

inner's innerMethod!!!

也可以重写innerMethod方法,例子如下:

package main

import "fmt"

type inner struct {

  i string

}

func (in *inner) innerMethod() {

  fmt.Println("inner's innerMethod!!!")

}

type outter struct {

  s1 string

  s2 int

  s3 bool

  inner

}

func (o *outter) innerMethod(s string) {

  fmt.Println("outter's innerMethod!!!")

}

func main() {

  o := new(outter)

  fmt.Printf("o.i %v\n", o.i)

  o.i = "inner"

  fmt.Printf("o.i %v\n", o.i)

  //o.innerMethod()

  o.innerMethod("test")

}

输出结果:

o.i

o.i inner

outter's innerMethod!!!

多态

golang中,只要某个struct实现了某个interface中的所有方法,那么我们就认为,这个struct实现了这个类。

例子如下:

package main

import "fmt"

type Person interface {

    Action()

}

type Girl struct {

    Name string

}

func (g *Girl) Action() {

    fmt.Printf("My name is %v\n", g.Name)

}

type Boy struct {

    Name string

}

func (b *Boy) Action() {

    fmt.Printf("My name is %v\n", b.Name)

}

func main() {

    girl := &Girl{Name: "Beautiful"}

    boy := &Boy{Name: "Handsome"}

    girl.Action()

    boy.Action()

}

输出结果:

My name is Beautiful

My name is Handsome

相关文章

  • golang-面向对象

    思考:go语言不支持继承与多态的优点与缺点是什么 go语言只支持封装,不支持继承与多态 go语言没有class,只...

  • 【Golang 基础】Go 语言 面向对象

    Go 语言的面向对象   Go 语言的面向对象非常简单,仅支持封装,不支持继承和多态。继承和多态是在接口中实现的。...

  • Go封装、继承、多态

    封装 封装主要是通过访问权限控制实现的。 在Java中,共有public 、protected、default、p...

  • study_go_day7_结构体和方法

    package main import "fmt" /*面向对象 * go语言仅支持封装,不支持继承和多态,继承和...

  • Go语言之匿名组合

    一. 概述 Go语言中没有封装,继承,多态的概念,但是可以通过别的方式来实现这些特征 封装:使用方法实现 继承:使...

  • go 面向对象编程

    尽管GO语言没有封装,继承,多态这些概念,但同样通过别的方式实现这些特性封装:通过方法实现继承:通过匿名字段实现多...

  • iOS开发之一OC语言的特性

    三大特性:封装、继承、多态 一、封装(成员变量的封装) 二、继承 三、多态(多种形态)

  • go语言学习(8)--Struct

    面向对象 go只支持封装,不支持继承和多态go是面向接口的编程,也可以说go所有对象都是继承了一个空接口java这...

  • java多态

    概述 面向对线的四个基本特征:抽象,封装,基础,多态。抽象,封装,继承是多态的基础,多态是抽象,封装,继承的表现 ...

  • Go 面向对象、接口(二)

    欢迎来我的博客 go 语言仅支持封装,不支持继承和多态go 语言没有class 只有struct 结构体 声明和创...

网友评论

      本文标题:Go封装、继承、多态

      本文链接:https://www.haomeiwen.com/subject/awlphltx.html