假设现在我们定义了一个接口I,有两个方法Foo,Bar, 结构体Parent实现了 Foo,而Bar作为抽象方法由子类实现,
示例代码如下:
package main
type I interface {
Foo()
Bar()
}
type Parent struct {
I
}
func (p *Parent) Foo() {
p.Bar()
}
type Child struct {
Parent
}
func (c *Child) Bar() {
fmt.Println("Child.Bar()")
}
func main() {
c := &Child{
Parent: Parent{},
}
c.I = c // 如果注释掉这几句会提示空指针异常
c.Foo()
}
输出如下:
Child.Bar()
问题:
1.上面的代码实现了类似Java风格的抽象类,但是在main方法中的这句代码没看懂c.I = c,这句代码的本质是做了什么事情?为什么c.I = c就会报空指针异常