zoukankan      html  css  js  c++  java
  • Go-接口(作用类似python类中的多态)

    一.定义接口

    type Person interface {
    	Run()   //只要有run方法的都算 Person结构体
    }
    //还有定义方法
    type Person2 interface {
        Speak()
        Person  //相当于run()
    }
    

    二.实际使用

    package main
    
    import "fmt"
    
    type Person interface {
    	Run()
    }
    
    type Person2 struct {
    	name string
    }
    func (P Person2)Run(){
    	fmt.Println("我会走")
    }
    
    type Person3 struct {
    	name string
    }
    func (P Person3)Run(){
    	fmt.Println("我会飞")
    }
    
    func test(p Person){
    	p.Run()
    }
    
    func main() {
    	p1 :=Person2{}
    	p2 :=Person3{}
    	test(p1)
    	test(p2)
    }
    
    //p1与p2都有Run方法都算Person结构体,所有都可以由Run方法
    

    三.匿名空接口

    interface {}
    
    //可以接受所有数据类型
    package main
    
    import "fmt"
    func Test(a interface{}){fmt.Println(a)}
    func main(){
    	Test(1)
    	Test("WWW")
    }
    

    四.类型断言

    写法一:

    package main
    import "fmt"
    
    type Person struct {
    	name  string
    }
    func Test(a interface{}){
    	_,err :=a.(*Person)
    	if !err{
    		fmt.Println("是Person")
    	}
    }
    
    func main(){
    	a := Person{name: "p1"}
    	Test(a)
    }
    

    写法二:

    package main
    
    import (
    	"fmt"
    )
    
    type Person struct {
    	name string
    }
    
    func Test(a interface{}) {
        switch a.(type) {   //如果要获取a的对象就AStruct :=a.(type)
    	case Person:
    		fmt.Println("是Person")
    	default:
    		fmt.Println("不是Person")
    	}
    }
    func main() {
    	a := Person{name: "p1"}
    	Test(a)
    }
    
  • 相关阅读:
    HDU题目分类
    nyoj50爱摘苹果的小明
    nyoj24大数阶乘
    hduoj1094A+B for InputOutput Practice (VI)
    nyoj198数数
    NYOJ463九九乘法表
    nyoj436sum of all integer numbers
    hduoj1042N!
    hduoj1095A+B for InputOutput Practice (VII)
    nyoj458小光棍数
  • 原文地址:https://www.cnblogs.com/pythonywy/p/11908003.html
Copyright © 2011-2022 走看看