Go和Java的interface有什么不同

已邀请:

Xanthus - 红红火火恍恍惚惚

赞同来自: leoliu

似乎go的只要实现就好了,所以没有implements关键字

godonggua - java,go爱好者

赞同来自: leoliu

go的接口是 隐式实现, java是显式实现, 实际上 用法其实很像,懂java的接口,go的接口应该很好上手

zuly - 喝了一杯java才来

赞同来自: 九千鸦

和楼主一样是从Java来的,先喝一杯Java压压惊。 首先,从代码上来说java需要implements来显示的实现接口,并实现所有方法。而golang不需要,只要实现interface的所有方法就行。从这各方面来讲golang的代码侵入要小。而且在扩展方面要方便一些。 其次,如果楼主看过UML或者了解设计模式的话。Java和golang的接口其实都可以看做是组合的方式,但是golang把组合用的更极致,更简单。golang把设计模式中诟病的庞大继承体系,换成了很灵活的interface形式。这里有一句golang的名言,“如果这个对象(golang叫结构体)长的像鸭子,叫起来也像鸭子那么他就是一只鸭子”。 然后,面向对象的多态也是用golang的terface来实现的,而java是通过严谨的继承树,推荐文章 http://studygolang.com/articles/2652 最后一个小点。golang都实现了空接口,interface{}。而java是没有的。

toukii

赞同来自: heramerom

go的接口这么定义:

鸟会飞:

type Bird interface{
    Fly()
}

所以,会飞的都是鸟

type A strcut{}

func (a A) Fly() {
// bird A
}

java 这么定义接口

鸟会飞,但是,只有鸟蛋孵出来的才是鸟

zsy619 - 为了梦想

赞同来自: toukii

最大不同: go是组合,非侵入式接口 java是继承,侵入式接口 在面向对象设计原则中,有个原则:能用组合尽量不用继承。 从这点来说,go是更灵活的。

hoperuin - 80后IT男,9年javaer

赞同来自:

补充下楼上的:golang接口不能有默认方法,java8加入了默认方法机制实现了流编程

要回复问题请先登录注册