登录
首页 >  Golang >  Go问答

如果 T2 类型基于 T1 类型,那么从 T1 到 T2 是否存在某种“继承”?

来源:Golang技术栈

时间:2023-04-12 20:18:12 401浏览 收藏

目前golang学习网上已经有很多关于Golang的文章了,自己在初次阅读这些文章中,也见识到了很多学习思路;那么本文《如果 T2 类型基于 T1 类型,那么从 T1 到 T2 是否存在某种“继承”?》,也希望能帮助到大家,如果阅读完后真的对你学习Golang有帮助,欢迎动动手指,评论留言并分享~

问题内容

如果type T2是基于,除了共享相同的数据字段之外,和type T1之间有什么关系吗?T1``T2

包主
导入“fmt”

类型 T1 结构 { s 字符串 }
func (v *T1) F1() 字符串 { 返回 vs }

T2 T1 型
func (v *T2) F2() 字符串 { 返回 vs }

功能主要(){
        变量 t1 = T1{“xyz”}
        var t2 = T2{“pdq”}
        s0 := t2.F1() // 错误 - 预期正常
        s1 := ((*T1)(&t2)).F1() // 好的 - 预期的
        s2 := ((*T2)(&t1)).F2() // 好的 - 不是预期的
        fmt.Println(s0, s1, s2)
}

我在这里的理解不足

  1. 希望T2继承T1的方法,但事实并非如此。

  2. was expectingT2可以被强制转换为T1,因为它是从T1

  3. 很惊讶T1可以被强迫进入T2,但事实就是如此。

  4. 似乎T1和之间的关系T2是完全对称的——尽管事实上一个实际上是从另一个派生的,但我找不到任何破坏对称性的东西——或者这是一种错觉?

正确答案

Go 不支持面向对象的类型继承。

[Go 是面向对象的语言吗?](http://golang.org/doc/go_faq.html#Is_Go_an_object- oriented_language)

为什么没有类型继承?

方法绑定到单个特定类型。

方法声明将标识符绑定到方法。该方法被称为绑定到基本类型,并且仅在该类型的选择器中可见。

您可以类型T1T2.

x可以转换为类型 T[when]x的类型并T具有相同的基础类型。

例如,

package main

import (
    "fmt"
)

type T1 struct{ i int }

func (t T1) String() string { return "T1" }

type T2 T1

func (t T2) String() string { return "T2" }

func main() {
    t1 := T1{1}
    t2 := T2{2}
    fmt.Println(t1, t2)
    c1 := T1(t2)
    c2 := T2(t1)
    fmt.Println(c1, c2)
    t1 = T1(c2)
    t2 = T2(c1)
    fmt.Println(t1, t2)
}

Output:
T1 T2
T1 T2
T1 T2

今天关于《如果 T2 类型基于 T1 类型,那么从 T1 到 T2 是否存在某种“继承”?》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于golang的内容请关注golang学习网公众号!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>