zoukankan      html  css  js  c++  java
  • Go笔记-继承

    【Go中继承的实现】
        当一个匿名类型被内嵌在结构体中时,匿名类型的可见方法也同样被内嵌,这在效果上等同于外层类型 继承 了这些方法:将父类型放在子类型中来实现亚型
     1 package main
     2  
     3 import "fmt"
     4  
     5 type Point struct{
     6     x,y float64
     7 }
     8  
     9 type NamePoint struct{
    10     name string
    11     Point
    12 }
    13  
    14 func(p *Point)Abs()float64{
    15     return math.Sqrt(p.x*p.x + p.y*p.y)
    16 }
    17  
    18 func main(){
    19     n := &NamePoint{"gao",Point{3.1,3.3}}
    20     fmt.Println(n.Abs())
    21 }
    22  
    23 // 输出
    24 5
        内嵌将一个已存在类型的字段和方法注入到了另一个类型里:匿名字段上的方法“晋升”成为了外层类型的方法。当然类型可以有只作用于本身实例而不作用于内嵌“父”类型上的方法,可以覆写方法(像字段一样):和内嵌类型方法具有同样名字的外层类型的方法会覆写内嵌类型对应的方法。
     1 package main
     2  
     3 import "fmt"
     4  
     5 type point struct{
     6     x,y float64
     7 }
     8  
     9 type NamePoint struct{
    10     name string
    11     point
    12 }
    13  
    14 func(p *point)Abs()float64{
    15     return math.Sqrt(p.x*p.x + p.y*p.y)
    16 }
    17  
    18 // 重写
    19 func(np *NamePoint)Abs()float64{
    20     return np.point.Abs() * 100
    21 }
    22  
    23 func main(){
    24     n := &NamePoint{"gao",point{3.1,3.3}}
    25     fmt.Println(n.Abs())
    26 }
    27  
    28 // 输出,如果注释掉重写的部分输出会变成5
    29 500
        
     
    【Go中的多继承】
        Go支持多继承,方式就是在结构体中添加需要继承的类型
     1 package main
     2 
     3 import "fmt"
     4 
     5 //  多继承的方式和实现
     6 
     7 type Musician struct {
     8 }
     9 
    10 type Soldier struct {
    11 }
    12 
    13 type Doctor struct {
    14 }
    15 
    16 type SupperMan struct {
    17     Soldier
    18     Doctor
    19     Musician
    20 }
    21 
    22 func (m *Musician) Sing() string {
    23     return "i can singing"
    24 }
    25 func (s *Soldier) War() string {
    26     return "i can use gun and kill enemy"
    27 }
    28 
    29 func (d *Doctor) Heal() string {
    30     return "i can heal your injure"
    31 }
    32 
    33 func main() {
    34     man := new(SupperMan)
    35     fmt.Println(man.Sing())
    36     fmt.Println(man.War())
    37     fmt.Println(man.Heal())
    38 }
    39 
    40 // 输出
    41 An important answer
    42 How much there are
    43 The name of the thing
     
     
  • 相关阅读:
    Spring DI模式 小样例
    java中经常使用的日期格式化(全)
    循环-15. 统计素数并求和(20)
    [Unity3D]Unity3D游戏开发之自己主动寻路与Mecanim动画系统的结合
    【UVA】11732
    Mac OS使用技巧之十六:系统失去响应怎么办?
    C# 保存窗口为图片(保存纵断面图)
    Linux Resin 安装
    Etcd学习(二)集群搭建Clustering
    android中选择控件与选择界面自然过度效果的实现--一种新的交互设计
  • 原文地址:https://www.cnblogs.com/ymkfnuiwgij/p/7912249.html
Copyright © 2011-2022 走看看