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 }
  • 相关阅读:
    Balance的数学思想构造辅助函数
    1663. Smallest String With A Given Numeric Value (M)
    1680. Concatenation of Consecutive Binary Numbers (M)
    1631. Path With Minimum Effort (M)
    1437. Check If All 1's Are at Least Length K Places Away (E)
    1329. Sort the Matrix Diagonally (M)
    1657. Determine if Two Strings Are Close (M)
    1673. Find the Most Competitive Subsequence (M)
    1641. Count Sorted Vowel Strings (M)
    1679. Max Number of K-Sum Pairs (M)
  • 原文地址:https://www.cnblogs.com/luwei0915/p/15632328.html
Copyright © 2011-2022 走看看