PHP中的多态和GoLang中的多态

<?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());
package main

import "fmt"

//定义interface
type Action interface {
	canDo()
}
//通过func参数传入struct继承interface里的方法
func canDo(action Action)  {
	action.canDo()
}

//定义interface
type Position interface {
	showPosition()
}
//通过func参数传入struct继承interface里的方法
func showPosition(position Position){
	position.showPosition()
}

//结构体定义people对象
type People struct {
	name string
	postion string
}
//结构体定义animal对象
type Animal struct {
	name string
	position string
}

//不同对象(结构体)实现同一个方法
func (p *People) canDo()  {
	fmt.Printf("所以%v会做饭\n",p.name)
}
func (a *Animal) canDo()  {
	fmt.Printf("所以%v会摇尾巴\n",a.name)
}

//不同对象(结构体)实现同一个方法
func (p *People) showPosition()  {
	fmt.Printf("因为%v有%v,", p.name, p.postion)
}
func (a *Animal) showPosition()  {
	fmt.Printf("因为%v有%v,", a.name, a.position)
}


func main()  {
	//接口不能实例化,所以只能通过对接口的结构体实例化
	p := &People{"why", "手"}
	a := &Animal{"小狗", "尾巴"}

	showPosition(p)
	canDo(p)

	showPosition(a)
	canDo(a)
}
发布了200 篇原创文章 · 获赞 26 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/why444216978/article/details/103948799