+ 收藏我们

网站模板

网站模板搜索
404模板 营销型模板 外贸网站模板 单页模板 双语模板 标签大全
电话:18630701785
首页 > 站长学院 > 是否可以通过该接口中的其他方法来实现一个接口中的方法? >

是否可以通过该接口中的其他方法来实现一个接口中的方法?

时间:2024-04-06 14:29:33

亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《是否可以通过该接口中的其他方法来实现一个接口中的方法?》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下,希望所有认真读完的童鞋们,都有实质性的提高。

问题内容
例如,名为 computable 的接口,它有两个方法:sqrt() 和 abs()。

如果我想添加一个名为curve()的方法来计算sqrt和abs之和。

type Computable interace { 
    Sqrt() number  // method 1
    Abs() number   // method 2
    Curve() number // method should call Sqrt() + Abs()
}
显然,所有接口实现都不需要重写第三个方法。在c++/java中,解决这个问题很容易,但是谁能告诉我如何实现呢?


正确答案

Go 中没有默认方法实现。

在您的情况下,最简单的解决方案是将 curve() 移到界面之外,并将其实现为一个简单的函数:

type computable interface {
    sqrt() number // method 1
    abs() number  // method 2
}

func curve(c computable) number {
    return c.sqrt() + c.abs()
}
如果它必须是接口的一部分,那么您可以创建 curve() 的单个实现,该实现使用 computable 的值作为其“源”:

type curveimpl struct {
    computable
}

func (c curveimpl) curve() number {
    return c.sqrt() + c.abs()
}
希望实现 computable 的具体类型可以嵌入 curveimpl,但要使其正常工作,必须正确初始化:

type Foo struct {
    curveImpl
}

func (Foo) Sqrt() number { return 2.0 }
func (Foo) Abs() number  { return 4.0 }

func main() {
    f := Foo{}
    f.curveImpl = curveImpl{f}

    fmt.Println(f.Curve())
}
上面的示例输出 6(在 Go Playground 上尝试一下)。

正如您所看到的,完成这项工作涉及一些麻烦。所以在这种情况下,是否值得值得怀疑。如果 curve() 这么简单,我宁愿在需要的地方实现它。如果 curve() 会复杂得多,那么也许这种权衡是值得的。

再说一遍:最简单的方法是使用 curve() 函数,而不是这里的方法。

亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《是否可以通过该接口中的其他方法来实现一个接口中的方法?》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下,希望所有认真读完的童鞋们,都有实质性的提高。

问题内容
例如,名为 computable 的接口,它有两个方法:sqrt() 和 abs()。

如果我想添加一个名为curve()的方法来计算sqrt和abs之和。

type Computable interace { 
    Sqrt() number  // method 1
    Abs() number   // method 2
    Curve() number // method should call Sqrt() + Abs()
}
显然,所有接口实现都不需要重写第三个方法。在c++/java中,解决这个问题很容易,但是谁能告诉我如何实现呢?


正确答案

Go 中没有默认方法实现。

在您的情况下,最简单的解决方案是将 curve() 移到界面之外,并将其实现为一个简单的函数:

type computable interface {
    sqrt() number // method 1
    abs() number  // method 2
}

func curve(c computable) number {
    return c.sqrt() + c.abs()
}
如果它必须是接口的一部分,那么您可以创建 curve() 的单个实现,该实现使用 computable 的值作为其“源”:

type curveimpl struct {
    computable
}

func (c curveimpl) curve() number {
    return c.sqrt() + c.abs()
}
希望实现 computable 的具体类型可以嵌入 curveimpl,但要使其正常工作,必须正确初始化:

type Foo struct {
    curveImpl
}

func (Foo) Sqrt() number { return 2.0 }
func (Foo) Abs() number  { return 4.0 }

func main() {
    f := Foo{}
    f.curveImpl = curveImpl{f}

    fmt.Println(f.Curve())
}
上面的示例输出 6(在 Go Playground 上尝试一下)。

正如您所看到的,完成这项工作涉及一些麻烦。所以在这种情况下,是否值得值得怀疑。如果 curve() 这么简单,我宁愿在需要的地方实现它。如果 curve() 会复杂得多,那么也许这种权衡是值得的。

再说一遍:最简单的方法是使用 curve() 函数,而不是这里的方法。

有问题可以加入网站技术QQ群一起交流学习

本站会员学习、解决问题QQ群(691961965)

客服微信号:lpf010888

Title