菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
2321
16

秒懂 go 语言的继承

原创
05/13 14:22
阅读数 2378

对于go语言的继承,之前总是模模糊糊的分不清是什么。不知道如何通过何种方式来继承的。

秒懂 go 语言的继承

然后我就开始对照着java的方式,用java实现继承,然后用go语言实现同样的继承。

java的继承

// 动物类
class Animal {
    public   String name;
    public String subject;

    void eat(String food) {
        System.out.println(name + "喜欢吃:" + food + ",它属于:" + subject);
    }
}

// 猫类。 猫类继承动物类
class Cat extends Animal{
    // 猫自己的属性和方法
    public int age;
    void sleep() {
        System.out.println(name + "今年" + age + "岁了,特别喜欢睡觉");
    }
}

public class Test{
    public static void main(String[] args){
        // 创建一个动物实例
        Animal a = new Animal();
        a.name = "动物";
        a.subject = "动物科";
        a.eat("肉");

        // 创建一个猫实例
        Cat cat = new Cat();
        cat.name = "咪咪";
        cat.subject = "猫科";
        cat.age = 1;
        cat.eat("鱼");
        cat.sleep();
    }
}
输出结果入下:
    动物喜欢吃:肉,它属于:动物科
    咪咪喜欢吃:鱼,它属于:猫科
    咪咪今年1岁了,特别喜欢睡觉

go 语言实现继承

package main

import (
  "fmt"
  "strconv"
)

// 动物类
type Animal struct {
  name string
  subject string
}

// 动物的公共方法
func (a *Animal) eat(food string) {
  fmt.Println(a.name + "喜欢吃:" + food +",它属于:" + a.subject)
}

// 猫类,继承动物类
type Cat struct {
  // 继承动物的属性和方法
  Animal
  // 猫自己的属性
  age int
}

// 猫类独有的方法
func (c Cat) sleep() {
  fmt.Println(c.name + " 今年" + strconv.Itoa(c.age) + "岁了,特别喜欢睡觉")
}

func main() {
  // 创建一个动物类
  animal := Animal{name:"动物", subject:"动物科"}
  animal.eat("肉")

  // 创建一个猫类
  cat := Cat{Animal: Animal{name:"咪咪", subject:"猫科"},age:1}
  cat.eat("鱼")
  cat.sleep()
}
输出结果:
    动物喜欢吃:肉,它属于:动物科
    咪咪喜欢吃:鱼,它属于:猫科
    咪咪 今年1岁了,特别喜欢睡觉

总结

通过如上的代码可以看到,

  • 在go语言中, type name struct{} 结构体 就相当于其他语言中的 class 类的概念。
  • 在其他语言中,方法是直接写在在 类 里面的,而在go语言中,我们对于该结构体,如果存在方法,那么是以 func (结构体名) 方法名{} 的方式来声明方法。
  • 在java中, string + int = string,int类型的值不需要类型转换,而在go语言中,string + int,如果想要一个字符串,则需要对int 类型的值转换为string类型,然后才能拼接。

如果有不对的,希望各位大佬批评指正。感激不尽。

这是我本人的片面理解,仅仅是为了学习起来更快和更容易理解,而go语言本身是不推荐继承这个概念的,详细的可以参考这篇文章:https://studygolang.com/articles/17257

秒懂 go 语言的继承

秒懂 go 语言的继承

go

发表评论

0/200
2321 点赞
16 评论
收藏
为你推荐 换一批