go和java的区别_从面向对象的角度看Go语言与Java语言的区别

类型系统:JAVA中有两套完全独立的类型系统,一套是值类型系统,byte、int、boolean、char、double另一套是以object类型为根的对象类型系统,Integer,HashMap等。值类型系统希望用object类型引用,则需要装箱。而go语言中多数类型都是值语义,甚至包括一些复合类型如数组(array),结构体(struct)等,并且这些类型都可以有方法。我们可以给任何类型增加新方法。同时Go语言可以通过&获得一个对象的引用如 var b=&a

对象传递:Java中对象的方法会有隐藏的this指针传递,而Go语言中面向对象只是换了一种语法形式来表达,没有隐藏的this指针,即方法施加的目标显示传递,没有被隐藏。另外方法施加的目标不一定是指针(java传递的是指向对象的指针),如果是指针也可以不命名为this。

初始化:Java中有默认的构造函数或者用户自定义的构造函数,在Go中不需要,可以自定义一个普通的函数。

成员的可访问性:Java中使用private,protected,public,package等关键字进行访问控制。如果希望某个符号可被其他包(package)访问,需要将该符号定义为大写字母开头。小写字母开头的符号只能在包内访。

继承:Java的继承通过extends关键字完成,不支持多继承。Go语言的继承通过匿名组合完成:基类以Struct的方式定义,子类只需要把基类作为成员放在子类的定义中,并且可以通过调整基类成员的位置改变内存布局。

接口:java中的接口作为不同组件中的契约存在,是强制的,类必须声明实现了某接口,需要从该接口继承。哪怕是两个一模一样的接口但只有名字不一样,也只能根据类所声明的实现接口是否包括该接口来决定该类是否实现该接口,叫做“侵入式”的接口。而GO语言中采用的是非侵入式接口,一个类只需要实现接口要求的所有函数,那我们就说该类实现了该接口。GO语言可以通过接口进行接口查询(接口指向的对象是否实现了另外的接口),类型查询等。

多态:Java中的多态实现遵循一个原则:当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法。Java中的多态可以通过基于继承和基于接口两种方法实现。而在go语言一般不允许不同类型的赋值,即不支持传统的多态。interface是一个例外,可以用不同类型进行赋值只要一个类型实现了该接口,我们就可以将该类型的变量赋给该接口的变量。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值