释放双眼,带上耳机,听听看~!
确切的说,Go语言也提供了继承,但是采用了组合的文法,所以我们将其称为匿名组合:
1
2 1type Base struct {
2
1
2 1 Name string
2
1
2 1}
2
1
2 1func (base *Base) Foo() {...}
2
1
2 1func (base *Base) Bar() {...}
2
1
2 1type Foo struct {
2
1
2 1 Base
2
1
2 1 ...
2
1
2 1}
2
1
2 1func (foo *Foo) Bar() {
2
1
2 1 foo.Base.Bar()
2
1
2 1 ...
2
1
2 1}
2
1
2 1 以上代码定义了一个Base类(实现了Foo()和Bar()两个成员方法),然后定义了一个Foo类,该类从Base类“继承”并改写了Bar()方法(该方法实现时先调用了基类的Bar()方法)。
2
在“派生类”Foo没有改写“基类”Base的成员方法时,相应的方法就被“继承”,例如上面的例子中,调用foo.Foo()和调用foo.Base.Foo()效果一致。