确切的说,Go语言也提供了继承,但是采用了组合的文法,所以我们将其称为匿名组合:
type Base struct {
Name string
}
func (base *Base) Foo() {...}
func (base *Base) Bar() {...}
type Foo struct {
Base
...
}
func (foo *Foo) Bar() {
foo.Base.Bar()
...
}
以上代码定义了一个Base类(实现了Foo()和Bar()两个成员方法),然后定义了一个Foo类,该类从Base类“继承”并改写了Bar()方法(该方法实现时先调用了基类的Bar()方法)。
在“派生类”Foo没有改写“基类”Base的成员方法时,相应的方法就被“继承”,例如上面的例子中,调用foo.Foo()和调用foo.Base.Foo()效果一致。
有疑问加站长微信联系(非本文作者)