<?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)
}