zl程序教程

您现在的位置是:首页 >  后端

当前栏目

PHP中的多态和GoLang中的多态

PHPGolang 多态
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)
}