猿问

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

以下 Go 代码:


package main


import "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 引用。这背后的原理是什么?


MMTTMM
浏览 90回答 1
1回答

慕雪6442864

问题是您正在考虑将结构嵌入其他结构的能力作为继承,而事实并非如此。Go 不是面向对象的,它没有任何类或继承的概念。嵌入式结构体语法只是一个很好的速记,它允许使用一些语法糖。与您的代码等效的 Java 更接近:class Polygon {    int sides, area;}class Rectangle {    Polygon p;    int foo;}我假设你在想象它相当于:class Polygon {    int sides, area;}class Rectangle extends Polygon {    int foo;}事实并非如此。
随时随地看视频慕课网APP

相关分类

Python
我要回答