以下 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;
}
事实并非如此。
添加回答
举报
0/150
提交
取消