go和java繼承的區別

本文爲作者原創,轉載請註明出處: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中調用即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章