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语言的对比的主要内容,如果未能解决你的问题,请参考以下文章

6.4 Go语言中的空接口

6.4 Go语言中的空接口

6.4 Go语言中的空接口

go语言学习笔记 — 进阶 — 接口:空接口类型interface{} —— 能保存所有值

go语言学习笔记 — 进阶 — 接口:使用类型分支,批量判断空接口中变量的类型

go语言接口断言