##封装

go中的封装和java的不太一样,在go里面是没有java中的class,不过可以把struct看成一个类,封装可以简单地看作对struct的封装,如下

type obj1 struct {

valte1 string

}

type obj2 struct {

valte2 string

}

##继承

把struct看做类,struct中可以包含其他的struct,继承内部struct的方法和变量,同时可以重写,代码如下

package main

import "fmt"

type oo struct {

inner

ss1 string

ss2 int

ss3 bool

}

type inner struct {

ss4 string

}

func (i *inner) testMethod(){

fmt.Println("testMethod is called!!!")

}

func main() {

oo1 := new(oo)

fmt.Println("ss4无值:"+oo1.ss4)

oo1.ss4 = "abc"

fmt.Println("ss4已赋值"+oo1.ss4)

oo1.testMethod()//继承调用

oo1.inner.testMethod()//继承调用 这里也可以重写

}

##多态

go中的多台比java的隐匿得多,严格上说没有多态,但可以利用接口进行,对于都实现了同一接口的两种对象,可以进行类似地向上转型,并且在此时可以对方法进行多态路由分发,完全代码如下

package main

import "fmt"

type interfacetest interface {

//testMothod1() string

//testMothod()//这种会报语法错误 在go里面是不允许的

iMethod() //加上int则会报错 说明go的方法判断有返回值,而java没有

}

type obj1 struct {

valte1 string

}

type obj2 struct {

valte2 string

}

//从属不同对象的testMothod 返回值不同的接口实现

func ( obj11 *obj1)iMethod(){

fmt.Println("testMothod go obj1")

}

//从属不同对象的testMothod 返回值不同的接口实现

func ( obj11 *obj2)iMethod() {

fmt.Println("testMothod go obj2")

}

func gorun(ii interfacetest){

fmt.Println(ii.iMethod)

}

func main(){

var i interfacetest

//interfacetest_ := new(interfacetest)//这种方式进行多台路由转发会报错 GO需先声明 如 var i interfacetest

obj1_ := new(obj1)

//赋obj1

i = obj1_

i.iMethod()//正确打印

gorun(i)

gorun(obj1_)

//interfacetest_.testMethod() //这种在java中允许,在go中是不允许的

//赋obj2

obj2_ := new(obj2)

i = obj2_

i.iMethod()//正确打印

gorun(i)

gorun(obj2_)

list := [2]interfacetest{obj1_,obj2_}

slice := []interfacetest{}

slice = append(slice, obj1_)

slice = append(slice, obj2_)

for index,value := range slice {

fmt.Println(index)

fmt.Println(value)

}

fmt.Println(len(slice))

fmt.Println(len(list))

}

java封装继承多态语法,GO语言中封装,继承,和多态相关推荐

  1. java语言中的 继承_Java语言有关继承的总结

    一.继承 1.继承的概念 继承机制是面向对向程序设计不可缺少的关键概念,是实现软件可重用的根基,是提高软件系统的可扩张性与可维护性的主要途径.(它允许创建分等级层次的类). 继承是指一个类的定义可以基 ...

  2. python语言的语法_Python语言 中的一些特殊语法

    本文主要向大家介绍了Python语言 中的一些特殊语法,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 1.高阶函数 python支持函数式编程,它内置了一些特殊函数,这些函数具有 ...

  3. c语言中的指针语法,C语言中指针的用法介绍

    C语言中指针的用法介绍 for(int i=0;i { num+=*s;s++; } return num; ) 这个例子中的函数 fun统计一个字符串中各个字符的 ASCII 码值之和.前面说了,数 ...

  4. java继承的范例_Java范例中的继承

    java继承的范例 Inheritance in java is one of the core concepts of Object Oriented Programming. Java Inher ...

  5. java 同时修改同一个数据_Java 语言中锁的设计与应用

    前言 Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率.本文旨在对锁相关源码(本文中的源码来自JDK 8).使用场景进行举例,为读者介绍主流锁的知识点,以及不同的 ...

  6. java继承层次结构,在状态模式中实现继承层次结构 - java

    我有一个与此非常相似的设计: 这里的NewOrder,Registered&Granted都有通用方法AddOrderline()和Cancel(),因此将这两种方法重构为父类很容易. 当我要 ...

  7. java继承父类执行顺序_java中子类继承父类程序执行顺序问题

    Java中,new一个类的对象,类里面的静态代码块.非静态代码.无参构造方法.有参构造方法.类的一般方法等部分,它们的执行顺序相对来说比较简单,用程序也很容易验证.比如新建一个测试父类. public ...

  8. c语言运算符的语法,C语言中条件运算符的语法为

    条件运算符的语法为: (条件表达式)?(条件为真时的表达式):(条件为假时的表达式) 例如: x=a 条件运算符构成一个表达式.它是C++中唯一一个3元运算符,它们之间用"?"和& ...

  9. java继承怎么老是出错_java中子类继承父类时总是出错怎么回?

    权限public > 包(package,默认,也就是什么权限修饰符都不加) > proteced > private 子类继承了父类的所有成员(这样说实际是不对的),但只能访问父类 ...

最新文章

  1. android studio 读取内存txt文件_SharedPreference与文件存储
  2. 八皇后问题 (递归 搜索)
  3. 数据库:MySQL、HBase、ElasticSearch三者对比
  4. 【WebRTC---入门篇】(二)WebRTC的目录结构
  5. 用python写helloworld_Python Helloworld程序简单实现
  6. memcached和php关系,php – memcacheD这没关系?
  7. PS网页设计教程——小贴士:在PS中创建复古的页面
  8. h5下划线怎么设置_【Word技巧】毕业论文封面那条永远对不齐的下划线?
  9. php 判断访问类型,php如何判断访问系统的用户设备类型(代码示例)
  10. 服务器pci-e硬盘,来一发干货,PCI-E SSD硬盘使用须知
  11. PS文字的投影怎么打?
  12. Chromedrive下载与安装
  13. CleanMyMac X免费的c盘清理工具
  14. html5中播放本地音乐播放器,首款HTML5播放器 支持浏览器内播放本地音乐
  15. iOS 11.0新功能
  16. 微信小程序开发基础入门笔记
  17. RTL8188CUS驱动程序编译步骤
  18. Java代码关于TIFF/TIF图片转PNG
  19. Win10恢复照片查看器
  20. neural machine translation by jointly learning to align and translate

热门文章

  1. Android不使用支持库请求运行时权限
  2. linux修改arena大小,教大家Resolume Arena怎么设置大屏幕的方法
  3. UML之类图和包图,对象图
  4. win10 远程ubuntu
  5. win10安装dorcker笔记
  6. MultiResUNet笔记
  7. opencv 连通域笔记
  8. cmakelist 寻找opencv
  9. JS 事件冒泡和事件捕获
  10. Unexpected key(s) in state_dict: module.backbone.bn1.num_batches_tracked