zoukankan      html  css  js  c++  java
  • 面向对象编程三大特征3

    多重继承介绍:

    结构体的匿名字段是基本数据类型,如何访问,下面代码输出什么?


    匿名字段练习:

    type Monster struct {
      Name string
      Age int
    }

    type A struct {
      Monster
      int //匿名字段是基本数据类型
      n int
    }

    func main() {

      //演示一下匿名字段基本数据类型的使用
      var a A
      a.Name = "狐狸精"
      a.Age = 300
      a.int = 20
      a.n = 40
      fmt.Println("a=", a)
    }

    说明:

    1)如果一个结构体有int 类型的匿名字段,就不能有第二个。

    2)如果需要有多个int类型的字段,则必须给int字段指定名字。


    多重继承说明:

    如一个struct 嵌套了多个匿名结构体,那么该结构体可以直接访问嵌套的匿名结构体的字段和方法,从而实现了多重继承。

    案例演示:

    type Goods struct {
      Name string
      Price float64
    }

    type Brand struct {
      Name string
      Address string
    }

    type TV struct {
      Goods
      Brand
    }

    func main() {
      tv1 := TV {Goods{"电视机001", 5000},Brand{"海尔", "山东青岛"},}
      tv2 := TV {
        Goods{"电视机002", 5000.99},
        Brand{"西门子", "北京"},
      }
      tv3 := TV {
        Goods{
          Price : 4000,
          Name : "电视机003",
        },
        Brand{
          Name : "夏普",
          Address : "上海",
        },
      }
      fmt.Println(tv1)
      fmt.Println(tv2)
      fmt.Println(tv3)
    }


    多重继承细节说明:

    1)如嵌入的匿名结构体有相同的字段名或者方法名,则在访问时,需要通过匿名结构体类型名来区分。

      tv1 := TV {Goods{"电视机001", 5000},Brand{"海尔", "山东青岛"},}
      fmt.Println(tv1.Goods.Name)
      fmt.Println(tv1.Price)

    2)为了保证代码的简洁性,建议大家尽量不使用多重继承

  • 相关阅读:
    树莓派frp添加为服务管理
    liunx开源打印驱动foo2zjs编译小坑
    树莓派中实现ll命令
    Windows中使用QEMU创建树莓派虚拟机
    C#打印条码BarTender SDK打印之路和离开之路(web平凡之路)(转)
    数据库连接池问题 Max Pool Size
    C#时间
    XAF 如何从Excel复制多个单元格内容到GridView(收藏)
    C#日期处理(转) 太忘记了,备忘
    C#、devExpress 的 给bandedGrid加菜单功能 :复制、粘贴的例子(转)
  • 原文地址:https://www.cnblogs.com/green-frog-2019/p/11415398.html
Copyright © 2011-2022 走看看