本文爲作者原創,轉載請註明出處:https://blog.csdn.net/qq_34560344
go和java繼承的區別
Go語言的繼承通過匿名組合完成:基類以Struct的方式定義,子類只需要把基類作爲成員放在子類的定義中,支持多繼承。
Java的繼承通過extends關鍵字完成,不支持多繼承。
go(僞·繼承)測試代碼
package main
import "fmt"
type People struct{}
func (p *People) ShowA() {
fmt.Println("people showA")
p.ShowB()
}
func (p *People) ShowB() {
fmt.Println("people showB")
}
type Teacher struct {
People
}
func (t *Teacher) ShowB() {
fmt.Println("teacher showB")
}
func main() {
t := Teacher{}
t.ShowA()
}
//輸出結果:
//people showA
//people showB
java(真·繼承)測試代碼
public class People {
public void showA(){
System.out.println("people showA");
showB();
}
public void showB(){
System.out.println("people showB");
}
}
public class Teacher extends People{
@Override
public void showB() {
System.out.println("teacher showB");
}
}
public class TestMain {
public static void main(String[] args) {
People p = new Teacher();
p.showA();
}
}
//輸出結果:
//people showA
//teacher showB
通過以上兩段代碼發現,go調用ShowB()方法時並沒有去子類調用,而是使用父類的ShowB()方法
Go並不支持完全的面向對象,但這並不代表Go不支持面向對象,只是有些地方在使用的時候需要去注意,避免踩坑
本文只是測試了方法調用,沒有去展示go的多繼承,如果想測試多繼承只需新添加一個結構體,並將結構體添加到Teacher中調用即可