假设现在我们定义了一个接口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就会报空指针异常
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.