PHP中的多态和GoLang中的多态
2023-09-27 14:25:41 时间
<?php
interface Animal{
public function fun();
}
class Cat implements Animal{
function fun(){
echo "cat say miaomiao...\n";
}
}
class Dog implements Animal{
function fun(){
echo "dog say wangwang...\n";
}
}
function work($obj){
if($obj instanceof Animal){
$obj -> fun();
}else{
echo "no function";
}
}
work(new Dog());
work(new Cat());
在 Go 语言中,我们是隐式地实现接口。一个类型如果定义了接口所声明的全部方法,那它就实现了该接口,就可以像其它语言一样,在需要的地方用类(结构体)替代接口:
package main
import "fmt"
//定义interface
type Action interface {
canDo()
}
//通过func参数传入struct继承interface里的方法
func canDo(action Action) {
action.canDo()
}
//结构体定义people对象
type People struct {
name string
}
//结构体定义animal对象
type Animal struct {
name string
}
//不同对象(结构体)实现同一个方法
func (p *People) canDo() {
fmt.Printf("%v会做饭\n",p.name)
}
func (a *Animal) canDo() {
fmt.Printf("%v会摇尾巴\n",a.name)
}
func main() {
p := &People{"why"}
a := &Animal{"小狗"}
canDo(p)
canDo(a)
}