除去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以及getter
sex = 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 #动态绑定方法lilei.doPee("站着")
hanmeimei.doPee("蹲着")# 学习的方法
def doLearning(self, learn):
print "%s: %s" % (self.name, learn)Human.doLearning = doLearning #动态绑定方法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中的POJO
sex = 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 #动态绑定方法lilei.doPee("站着")
hanmeimei.doPee("蹲着")# 学习的方法
def doLearning(self, learn):print "%s: %s" % (self.name, learn)Human.doLearning = doLearning #动态绑定方法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 stringSex  string
}// 学习英语方法,绑定于Human
func (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)
}// Pee
func 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!")
}

python,java,go语言之间的区别!相关推荐

  1. pythonjava有什么区别_python,java,go语言之间的区别!

    除去Java Python Go这三种语言底层以及语法的不同,这里以个人的理解只说说其面向对象方面的思想. 一个简单的示例: 描述人,李雷,韩梅梅,他俩都是好学生. 将用 javapythongo 这 ...

  2. go与python的区别_python和GO语言之间的区别!

    python和GO语言是当下非常受欢迎的两大编程语言,通过它们可以完成很多的事情,那么python和GO语言之间有什么区别呢?下面本篇文章带大家了解一下. Python和Go之间的区别是什么? 1.范 ...

  3. python与C语言之间差异与区别

    最近在进行python的比赛,但又在学C版的数据结构的内容,为防止两方面内容的混淆,在这里将Python与C之间的差别进行标注,便于学习理解.此文仍在整理,后续还会修改. Python与C之间的差异 ...

  4. 脚本语言和编程语言的区别_编程语言和脚本语言之间的区别

    脚本语言和编程语言的区别 A programming language is a language used to write set of instructions to perform a tas ...

  5. Java和JavaScript之间的区别

    1.简介 我们将在本文中比较Java语言和JavaScript语言. JavaScript由Netscape开发. 它最初是用于客户端的脚本语言,后来又用作客户端和服务器脚本的语言. Java由Jam ...

  6. Python 应用领域以及版本之间的区别

    Python 应用领域以及版本之间的区别 一.Python应用领域 Python+人工智能,给你更多研究方向选择! 企业级综合实战项目,集六大前沿技术为一体 二. Python 2与Python 3的 ...

  7. Java与jar之间的区别

    本文翻译自:Difference between jar and war in Java What is the difference between a .jar and a .war file? ...

  8. python与c语言有什么区别呢_c语言和python之间有什么区别

    Python和C语言都是一种高级编程语言,它们之间有相似之处,也有不少差异.下面本篇文章就来给大家介绍一下c语言和python之间有哪些的区别,希望对大家有所帮助. 1.语言类型 Python是一种基 ...

  9. c与python的区别-Python与C语言有什么区别?

    答题练手.手机排版不佳请谅解~ 更新2:还是关于编译和解释 二者的本质区别是在编译/解释器的总体工作方式上的,编译器是off-line,解释器是on-line.编译器把整个程序读进来,进行一系列变大变 ...

最新文章

  1. 【Qt】通过QtCreator源码学习Qt(五):QLoggingCategory管理、分类、过滤打印信息
  2. Savior:渗透测试报告自动生成工具
  3. 安装Android模拟器Genymotion【Android学习入门】
  4. CL_CRM_REPORT_QUESTION call CRM_REPORT_RF_CHECK_AUTHORITY
  5. 如何在Android TV上自定义推荐行
  6. [Nginx]nginx 配置实例-动静分离
  7. 微软:攻击者利用SolarWinds Serv-U 0day发动 Log4j 攻击
  8. JS onclick 传参异常问题
  9. 如何解决SQL挂起问题
  10. bzoj 1171 大sz的游戏 2892 强袭作战 (线段树+单调队列+永久性flag)
  11. SiteMesh3简介及使用
  12. 如何在html中使用特殊字体
  13. 计算机组成原理74138译码器连接,74138(74138译码器工作原理)
  14. 哪些客户群体适合使用云服务器?
  15. SWUST OJ 99:Euclid‘s Game
  16. 90后小伙自己开发APP年赚10亿,自己开发APP需要什么工具
  17. 如何评价 APICloud ?
  18. vlog用什么来剪辑?分享1个剪辑生活vlog的技巧
  19. 机器学习之---文本分析(jieba分词和词云绘制)
  20. Firefox(火狐浏览器)常用插件

热门文章

  1. 扫描某网段存活主机(如何判定是否存活,去发送arp报文,如果有回应,表示存活)
  2. mysql绑定多个ip地址 (mysql给用户授权了, 还是无法远程连接)
  3. SecoClient在win10系统中连接失败解决方案
  4. 基于Dockerfile制作镜像
  5. 腾讯android web,Android 使用腾讯TBS
  6. Google搜索中国定制版已黄了,百度再次PK的希望或落空
  7. 如何在win10新建菜单添加新的文件类型
  8. 计算机网络原理第二章答案
  9. 量化交易 多因子打分法策略
  10. element tab选项卡标签样式