GO语言:接口空接口与Java语言的对比
Posted GO我们一起学
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GO语言:接口空接口与Java语言的对比相关的知识,希望对你有一定的参考价值。
接口
interface 关键字来声明,Go的接口是对其他类型行为的抽象和概括;接口类型不会和特定的实现细节绑定在一起,通过这种抽象的方式让对象更灵活。
在Java语言中接口要先于实现类,通过implements 关键字 绑定 接口和实现类的关系;Go语言则不需要进行绑定。详情见下代码说明。
接口In Java
public interface Animal{
void eat();
void run();
}
class Dog implements Animal{
public void eat(){
System.out.println("dog eat gouliang");
}
public void run(){
System.out.println("dog run");
}
}
class Cat implements Animal{
public void eat(){
System.out.println("cat eat fash");
}
public void run(){
System.out.println("cat run");
}
}
接口 In Go
不需要其他的代码去维护接口与实现类之间的关系,只要接口中的方法,实现类有即可,如果没有完全实现,就不算是接口的实现类。不抛异常、不报错
type Animal interface {
eat()
run()
}
type Dog struct{
}
func (d Dog) eat(){
fmt.Println("dog eat")
}
func (d Dog) run(){
fmt.Println("dog run")
}
好处:如 代码的扩展,先写了鸡鸭鹅的类型和行为,都有speak(),需要开发一个屠宰场,鸡、鸭、鹅被kill() 都要发出叫声,那你只需要 添加一个接口 ,接口有speak()方法约束。下面代码示意
// 先有鸡、鸭、鹅
type chicken struct{
kind string
sex string
}
func (c chicken)speak(){
fmt.Println("I am a chicken,大侠饶命");
}
// 先有鸡、鸭、鹅
type duck struct{
name string
sex string
}
func (c duck)speak(){
fmt.Println("我是唐老鸭,刀下留鸭");
}
//现在要新建一个屠宰场,屠宰场的功能就是杀杀杀,有一个现象就是不管杀什么动物 它都得叫叫叫
//定义一个场
type AnimalFactory struct{
name string
}
//杀的时候得发出叫声,有可能是鸡,也有可能是鸭,总之杀的是会叫的东西
//那么我们定义一个会叫的归类
type speaker interface{
speak()
}
func (af AnimalFactory) killAnimal( s speaker ){
//一顿锤之后.....
s.speak()
}
func main() {
aF := AnimalFactory{name:"屠宰场"}
d :=duck{name:"TLY"}
aF.killAnimal(d)
c :=chicken{kind:"鸡你太美"}
aF.killAnimal(c)
}
接口的继承
接口的继承与类型的继承相似,通过内含匿名接口继承。
空接口
空接口没有任何方法的约束,所以说是任何类型都实现了空接口,所以这里我觉得与Java的Object对象类似,Object是所有类的父对象。区别是,Object对象有内置的方法供所有类使用
//定义一个空接口
type nullInter interface{}
空接口使用
map[string]nullInter
//这个map 可以装任何类型的值
以上是关于GO语言:接口空接口与Java语言的对比的主要内容,如果未能解决你的问题,请参考以下文章
go语言学习笔记 — 进阶 — 接口:空接口类型interface{} —— 能保存所有值