golang - 面向对象继承 上篇

221 阅读2分钟

这是我参与8月更文挑战的第25天,活动详情查看:8月更文挑战

什么是继承?

继承是面向对象的基本特征之一,继承就是子类继承父类的特征和行为,使得子类对象(实例)自动就拥有了父类的属性和方法,当多个子类拥有父类相同的方法和属性时,就可以抽取共有特征和方法形成一个父级类,形成了父子类之间关系。

继承,指可以让某个类型的对象获得另一个类型的对象的属性的方法
它支持按级分类的概念。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。通过继承创建的新类称为"子类"或"派生类",被继承的类称为"基类"、"父类"或"超类"

继承的使用

结构体嵌套

继承在go语言中主要通过在一个结构体中嵌套另一个结构体,那么这个结构体自动拥有另一个结构体的字段与方法,实现了继承

定义个model包,新建payment.go文件,这里我们将结构体PaymentArgs

package model
import "fmt"

// 微信支付
// 支付宝
// 银联
// 银行卡
type PaymentArgs struct {
    AppId string
    MchId string
    Key string
    CallbackUrl string
}

同时在model包,新建Alipay.go文件,这里我们让结构体Alipay继承PaymentArgs

package model
import "fmt"
type Alipay struct {
    PaymentArgs
    AlipayOpenID string
    string
}

这样Alipay结构体就自动拥有PaymentArgs的信息 在我们的main.go文件中这样来实现结构体变量

alipay := &model.Alipay {
    PaymentArgs: model.PaymentArgs {
        AppID: "alipay123",
        MchID: "alipayMchId",
        Key: "alipayKey",
        CallbackUrl: "http://www.alipay.com"
    },
    AlipayOpenID: "alipayOpenID"
}

当然,如果想再为微信支付增加一个类似的结构体,也可以同时在model包,新建payment_weixin.go文件,这里我们让结构体weixinPay继承PaymentArgs, 访问方式同Alipay

我们在main.go中来打印他们的信息

fmt.Println(alipay.PaymentArgs.AppID)
fmt.Println(weixinpay.weixinOpenID)