侵入式接口:例如Java、C++语言主要表现在实现类需要明确指出自己实现了某个接口.
代码示例
//定义一个接口
interface Person{
void sleep();
void run();
void eat();
}
//创建一个Student类 实现Person接口
class Student implements Person{
void sleep(){
sout("学生睡觉了...");
}
void run(){
sout("学生跑步了...");
}
void eat(){
sout("学生吃饭了...");
}
}
//创建学生类对象调用这些方法
Student student = new Student();
student.sleep();
非侵入式接口:在Go中,一个类(sturct) 只需要实现接口的所有函数,我们就说这个类实现了该接口.
代码示例:
//定义一个struct
type Student struct{}
//让类去实现一些方法
func (s * Student) run(){
fmt("学生跑步了...")
}
func (s *Student) eat(){
fmt("学生吃饭了...")
}
func (s *Student) sleep(){
fmt("学生睡觉了...")
}
//定义多个接口
type inter1 interface{
run()
sleep()
eat()
}
type inter2 interface{
run()
sleep()
}
type inter3 interface{
run()
}
尽管Srudent类没有从这些接口进行继承.甚至不知道这些接口的存在.但是学生类实现这些接口
var studnet1 inter1 = new(Student)
inter1.run()
inter1.sleep()
inter1.eat()
而 inter3类型的则只能调用 run()函数了
var student3 inter3 = new(Student)
student3.eat()