python,java,go語言之間的區別!

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

除去Java Python Go這三種語言底層以及文法的不同,這裡以個人的理解只說說其物件導向方面的思想。 一個簡單的樣本:

描述人,李雷,韓梅梅,他倆都是好學生。

將用 javapythongo 這三種語言分別簡單的描述。

Java 思想

人,是抽象的概念,可以洗衣做飯的靈長目物種,沒法特指一樣具體的東西,但它也有一些如性別、撒尿這類的屬性和功能。

/** * 抽象出來的人 */abstract class Human {    protected String sex;    protected String name;    public void setSex(String sex) {        this.sex = sex;    }    public String getSex() {        return this.sex;    }    public void setName(String name) {        this.name = name;    }    public String getName() {        return this.name;    }    abstract void doPee(); // 抽象的方法}

這裡使用抽象類別,是因為名字都是父母起的,但撒尿的方法男女不同。接下來是具象人這個抽象的概念了。這裡就固話性別屬性並且具體定義撒尿的方式。

/** * 具象的男性 */ class Male extends Human { public Male() { this.sex = "男"; }

    /**     * 實現的方法     */    public void doPee() {        System.out.println(this.name + " " + this.sex + "站著撒尿.");    }}/** * 具象的女性 */class Female extends Human {    public Female() {        this.sex = "女";    }    /**     * 實現的方法     */    public void doPee() {        System.out.println(this.name + " " + this.sex + "蹲著撒尿.");    }}

現在有男人和女人了,然後李磊和韓梅梅就要來折磨我們了

Male lilei = new Male();lilei.setName("李磊");System.out.println(lilei.getName() + " " + lilei.getSex() + " " + "出場");Female hanmeimei = new Female();hanmeimei.setName("韓梅梅");System.out.println(hanmeimei.getName() + " " + hanmeimei.getSex() + " " + "出場");lilei.doPee();hanmeimei.doPee();_________________________________________________output: 李磊 男 出場output: 韓梅梅 女 出場output: 李磊 男站著撒尿.output: 韓梅梅 女蹲著撒尿.

李磊和韓梅梅都是好學生,我們這裡定義學習的介面,這裡的介面就是,大家必須得死學傻學,怎麼學看你自己。

/** * 學習介面 */interface Study {    public abstract void learningEnglish();}

上面是教育部規定的,李磊韓梅梅作為學生必須得學,男人女人都得經曆的。來實現學習介面。

 class Male extends Human implements Study {    ......    ......    /**     * 實現的介面     */    public void learningEnglish() {        System.out.println(this.name + ": How are you?");    }}/** * 具象的女性 */class Female extends Human implements Study {    ......    ......    /**     * 實現的介面     */    public void learningEnglish() {        System.out.println(this.name + ": I'm fine, thank you!");    }}............lilei.doPee();hanmeimei.doPee();lilei.learningEnglish();hanmeimei.learningEnglish();_________________________________________________output: 李磊: How are you?output: 韓梅梅: I'm fine, thank you!

java的思想大致就是這麼樣。很嚴謹,就像一個老學究,1就是1,2就是2。

這是所有的java代碼

Main.java

public class Main {    public static void main(String[] args) {        Male lilei = new Male();        lilei.setName("李磊");        System.out.println(lilei.getName() + " " + lilei.getSex() + " " + "出場");        Female hanmeimei = new Female();        hanmeimei.setName("韓梅梅");        System.out.println(hanmeimei.getName() + " " + hanmeimei.getSex() + " " + "出場");        lilei.doPee();        hanmeimei.doPee();        lilei.learningEnglish();        hanmeimei.learningEnglish();    }}/** * 抽象出來的人 */abstract class Human {    protected String sex;    protected String name;    public void setSex(String sex) {        this.sex = sex;    }    public String getSex() {        return this.sex;    }    public void setName(String name) {        this.name = name;    }    public String getName() {        return this.name;    }    abstract void doPee(); // 抽象的方法}/** * 學習介面 */interface Study {    public abstract void learningEnglish();}/** * 具象的男性 */class Male extends Human implements Study {    public Male() {        this.sex = "男";    }    /**     * 實現的方法     */    public void doPee() {        System.out.println(this.name + " " + this.sex + "站著撒尿.");    }    /**     * 實現的介面     */    public void learningEnglish() {        System.out.println(this.name + ": How are you?");    }}/** * 具象的女性 */class Female extends Human implements Study {    public Female() {        this.sex = "女";    }    /**     * 實現的方法     */    public void doPee() {        System.out.println(this.name + " " + this.sex + "蹲著撒尿.");    }    /**     * 實現的介面     */    public void learningEnglish() {        System.out.println(this.name + ": I'm fine, thank you!");    }}

Python 思想

python無以言狀的靈活,你就是上帝!

這裡我們只要建立一個根類,其他的東西,隨時隨地,想加就加。

class Human:"""人"""def __init__(self):    self.__name = ""    self.__sex = ""def setName(self, name):    self.__name = namedef getName(self):    return self.__namedef setSex(self, sex):    self.__sex = sexdef getSex(self):    return self.__sexname = property(getName, setName) # 就像java中的POJO setter以及gettersex = property(getSex, setSex) # 就像java中的POJO setter以及getter

下面就邊執行邊豐滿它

lilei = Human()lilei.sex = "男"lilei.name = "李磊"print "%s %s 出場" % (lilei.name, lilei.sex)hanmeimei = Human()hanmeimei.sex = "女"hanmeimei.name = "韓梅梅"print "%s %s 出場" % (hanmeimei.name, hanmeimei.sex)# Pee的方法def doPee(self, how):print "%s %s %s撒尿" % (self.name, self.sex, how)Human.doPee = doPee #動態Binder 方法lilei.doPee("站著")hanmeimei.doPee("蹲著")# 學習的方法def doLearning(self, learn):print "%s: %s" % (self.name, learn)Human.doLearning = doLearning #動態Binder 方法lilei.doLearning("How are you?")lilei.doLearning("I'm fine, thank you!")_________________________________________________output: 李磊 男 出場output: 李磊韓梅梅 女 出場output: 李磊 男 站著撒尿output: 韓梅梅 女 蹲著撒尿output: 李磊: How are you?output: 李磊: I'm fine, thank you!

python中一切對象都是鴨子類型,何謂鴨子類型?只要會"嘎嘎"叫的東西都是鴨子。應用到上面情境中,只要具有學習和撒尿方法的對象都可以看作人了。從另一方面說,我對於鴨子只關注它是否能夠"嘎嘎"叫,如果能,不管是什麼東西,那麼它就是一隻鴨子; 對於人,只關注他們是否能撒尿與學習,既能撒尿又能學習,他憑什麼就不是人?

python和java就好像陰陽之替的東方玄學之餘西方哲學。

這是所有的python代碼

test.py:

#!/usr/bin/env python# -*- coding: utf-8 -*-class Human:"""人"""def __init__(self):    self.__name = ""    self.__sex = ""def setName(self, name):    self.__name = namedef getName(self):    return self.__namedef setSex(self, sex):    self.__sex = sexdef getSex(self):    return self.__sexname = property(getName, setName) # 就像java中的POJOsex = property(getSex, setSex) # 就像java中的POJOif __name__ == '__main__':lilei = Human()lilei.sex = "男"lilei.name = "李磊"print "%s %s 出場" % (lilei.name, lilei.sex)hanmeimei = Human()hanmeimei.sex = "女"hanmeimei.name = "韓梅梅"print "%s %s 出場" % (hanmeimei.name, hanmeimei.sex)# Pee的方法def doPee(self, how):    print "%s %s %s撒尿" % (self.name, self.sex, how)Human.doPee = doPee #動態Binder 方法lilei.doPee("站著")hanmeimei.doPee("蹲著")# 學習的方法def doLearning(self, learn):    print "%s: %s" % (self.name, learn)Human.doLearning = doLearning #動態Binder 方法lilei.doLearning("How are you?")lilei.doLearning("I'm fine, thank you!")

Go 思想

物件導向之於Go,沒有繼承這麼一說,更像是C與Python的結合體,並把鴨子類型發揚到極致。

介面(interface)就好比是一隻"鴨子",而interface結構體內包裹的方法就是這隻"鴨子"所具有的功能,Go中,介面可以描述為: 具有這些功能的傢伙就是這隻"鴨子"

方法(func)被定義在結構(類/struct)之外,被綁定於這個結構之上,可以描述為: 這是它的功能,當一個struct中的一些方法都包含在某個interface中時,我們就說: 啊哈,這就是那隻"鴨子",哪怕它多長了幾條腿(func),它也是啊

關於繼承,沒有,go中雖然內嵌很像繼承但不是。繼承是一脈相傳,而go的內嵌表達出你中有我我中有你的情懷,需要用到某個struct的功能了,那麼就對它說 你就是我的一部分

struct、interface、func 這些幾乎就是Go物件導向的全部了,如此簡潔。

package main

import (    "fmt")// 介面 學生type Student interface {    learningEnglish(string)}// 結構type Human struct {    Name string    Sex  string}// 學習英語方法,綁定於Humanfunc (student Human) learningEnglish(learning string) {    fmt.Printf("%s: %s\n", student.Name, learning)}// 結構 男人// go沒有繼承這個概念,這裡是嵌入type Male struct {    Human "嵌入欄位"}type Female Male// 方法, 綁定到了Human結構func (this Human) Pee(how string) {    fmt.Printf("%s %s %s撒尿\n", this.Name, this.Sex, how)}// 學習func doLearning(learning Student, learing string) {    learning.learningEnglish(learing)}// Peefunc doPee(human interface {}) {    switch sex := human.(type){    case Male:        sex.Pee("站著")    case Female:        sex.Pee("蹲著")    }}func main() {    lilei := Male{}    lilei.Name = "李雷"    lilei.Sex = "男"    fmt.Printf("%s %s 出場\n", lilei.Name, lilei.Sex)    hanmeimei := Female{}    hanmeimei.Name = "韓梅梅"    hanmeimei.Sex = "女"    fmt.Printf("%s %s 出場\n", hanmeimei.Name, hanmeimei.Sex)    doPee(lilei)    doPee(hanmeimei)    doLearning(lilei, "How are you?")    doLearning(hanmeimei, "I'm fine, thank you!")}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.