zoukankan      html  css  js  c++  java
  • 77_Go基础_1_44 接口是一种类型

     1 package main
     2 
     3 import "fmt"
     4 
     5 // 1.定义接口
     6 type USB interface {
     7     start() //USB设备开始工作
     8     end()   //USB设备结束工作
     9 }
    10 
    11 // 2.实现类
    12 type Mouse struct {
    13     name string
    14 }
    15 
    16 type FlashDisk struct {
    17     name string
    18 }
    19 
    20 func (m Mouse) start() {
    21     fmt.Println(m.name, "鼠标,准备就绪,可以开始工作了,点点点。。")
    22 }
    23 func (m Mouse) end() {
    24     fmt.Println(m.name, "结束工作,可以安全退出。。")
    25 }
    26 
    27 func (f FlashDisk) start() {
    28     fmt.Println(f.name, "准备开始工作,可以进行数据的存储。。")
    29 }
    30 func (f FlashDisk) end() {
    31     fmt.Println(f.name, "可以弹出。。")
    32 }
    33 
    34 func (f FlashDisk) deleteData() {
    35     fmt.Println(f.name, "U盘删除数据。。")
    36 }
    37 
    38 // 3.测试方法 传递的是一个接口类型,就是为了执行接口内所有的方法
    39 func testInterface(usb USB) { //usb = m1  usb = f1
    40     usb.start()
    41     usb.end()
    42 }
    43 
    44 func main() {
    45     /*
    46         接口:interface
    47             在Go中,接口是一组方法签名。
    48 
    49             当某个类型为这个接口中的所有方法提供了方法的实现,它被称为实现接口。
    50 
    51             Go语言中,接口和类型的实现关系,是非侵入式
    52 
    53             //其他语言中,要显示的定义
    54             class Mouse implements USB{}
    55 
    56         1.当需要接口类型的对象时,可以使用任意实现类对象代替
    57         2.接口对象不能访问实现类中的属性
    58 
    59 
    60         多态:一个事物的多种形态
    61             go语言通过接口模拟多态
    62 
    63             就一个接口的实现
    64                 1.看成实现本身的类型,能够访问实现类中的属性和方法
    65                 2.看成是对应的接口类型,那就只能够访问接口中的方法
    66 
    67         接口的用法:
    68             1.一个函数如果接受接口类型作为参数,那么实际上可以传入该接口的任意实现类型对象作为参数。
    69             2.定义一个类型为接口类型,实际上可以赋值为任意实现类的对象
    70 
    71 
    72         鸭子类型:
    73 
    74     */
    75 
    76     // 1.创建Mouse类型
    77     m1 := Mouse{"罗技小红"}
    78     fmt.Println(m1.name)
    79 
    80     // 2.创建FlashDisk
    81     f1 := FlashDisk{"闪迪64G"}
    82     fmt.Println(f1.name)
    83 
    84     testInterface(m1)
    85     testInterface(f1)
    86 
    87     var usb USB
    88     usb = f1
    89     usb.start()
    90     usb.end()
    91 
    92     f1.deleteData() // 自己独有的方法
    93 
    94     var arr [3]USB // 接口是一种类型
    95     arr[0] = m1
    96     arr[1] = f1
    97     fmt.Println(arr) // [{罗技小红} {闪迪64G} <nil>]
    98 }
  • 相关阅读:
    单精度和双精度
    @Transactional注解用法
    JPA No EntityManager with actual transaction available for current thread
    上传文件Request Entity Too Large解决办法
    PG数据库查看当前会话和结束会话
    Chrome浏览器记不住密码也不提示保存密码win10
    ARM平台VMP保护开发入门
    关于我
    HDU7072:Boring data structure problem——题解
    HDU7067:Just another board game——题解
  • 原文地址:https://www.cnblogs.com/luwei0915/p/15632328.html
Copyright © 2011-2022 走看看