为了账号安全,请及时绑定邮箱和手机立即绑定

Go : 可以将结构分配给接口,但不能分配超结构

Go : 可以将结构分配给接口,但不能分配超结构

MMTTMM 2021-06-07 12:10:01
以下 Go 代码:package mainimport "fmt"type Polygon struct {    sides int    area int}type Rectangle struct {    Polygon    foo int}type Shaper interface {    getSides() int}func (r Rectangle) getSides() int {    return 0}func main() {       var shape Shaper = new(Rectangle)     var poly *Polygon = new(Rectangle)  }导致此错误:cannot use new(Rectangle) (type *Rectangle) as type *Polygon in assignment我不能像在 Java 中那样将 Rectangle 实例分配给 Polygon 引用。这背后的原理是什么?
查看完整描述

1 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

问题是您正在考虑将结构嵌入其他结构的能力作为继承,而事实并非如此。Go 不是面向对象的,它没有任何类或继承的概念。嵌入式结构体语法只是一个很好的速记,它允许使用一些语法糖。与您的代码等效的 Java 更接近:


class Polygon {

    int sides, area;

}


class Rectangle {

    Polygon p;

    int foo;

}

我假设你在想象它相当于:


class Polygon {

    int sides, area;

}


class Rectangle extends Polygon {

    int foo;

}

事实并非如此。


查看完整回答
反对 回复 2021-06-21
  • 1 回答
  • 0 关注
  • 89 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信