V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
hustlzp
V2EX  ›  Python

关于Java中的抽象类/接口,与Python中类的对比理解。

  •  
  •   hustlzp ·
    hustlzp · 2013-09-11 10:04:57 +08:00 · 3167 次点击
    这是一个创建于 3873 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近因为想折腾下Android App,所以在学Java。

    对C的语法和Python的面向对象知识比较熟悉的话,Java学起来不是很困难。

    就是感觉Java里面的东西太过繁杂。

    感觉其中的抽象类和接口就是一种语法糖,Java只不过是在编译的时候对抽象类和接口进行了限制,比如不能实例化,方法只有定义不能有实体等等。

    这些东西在python中直接就全部简化为类了:

    * 用类的继承实现“继承抽象类”;
    * 用类的多重继承实现“implements 多个接口”,还有一些特别常用的接口比如Iterable直接化为类的魔法方法__iter__了,在需要遍历操作的时候自动调用(for in, in, map, reduce, filter等操作)。

    从这点大概可看出Java和Python在设计风格上的不同:

    * Java更注重确定性,通过各种语法糖+附带的编译器限制,把条条框框都定起来,再允许开发者在这些框框下去用;
    * Python则更加注重灵活多变,到底怎么用/是什么由开发者在具体运用的时候来抉择,运行时知晓一切。

    Java更加依赖各种语法/限定来保证软件质量,Python更加相信开发者的水平足以保证软件质量。

    小弟的理解是对的吗?请大家指点。
    10 条回复    1970-01-01 08:00:00 +08:00
    BOYPT
        1
    BOYPT  
       2013-09-11 10:18:35 +08:00
    不差。按Python作者Guido的说法就是,只保留实用的部分。

    但这样的对比并不公平,因为java是静态语言,对于类型处理都是需要预定义的,这点在C++/Java/Go等静态语言里面都有一样的体现,这一点形成的一系列静态语言特性,拿来和动态语言比较是不在一个层次上的。静态语言需要一个确定类型声明,所以才需要定义interface(C++的纯虚类),才会出现implement 的概念…… 而动态语言里本来都不需要预先确定对象的声明。
    hustlzp
        2
    hustlzp  
    OP
       2013-09-11 10:22:59 +08:00
    @BOYPT 恩,理解你的意思了。这是静态语言的要求。
    hustlzp
        3
    hustlzp  
    OP
       2013-09-11 10:23:22 +08:00
    @BOYPT 静态与动态各有各的优势。
    pyKun
        4
    pyKun  
       2013-09-11 10:26:39 +08:00
    “Java更加依赖各种语法/限定来保证软件质量,Python更加相信开发者的水平足以保证软件质量。”

    这句话哪来的。。。
    holmesabc
        5
    holmesabc  
       2013-09-11 10:40:50 +08:00
    "Java更加依赖各种语法/限定来保证软件质量,Python更加相信开发者的水平足以保证软件质量"

    这句略坑了哈。

    抽象类与接口看做语法糖,这个理解不太好吧。
    感觉coolshell里面说的,java的接口来填c++的坑,倒是有些道理的。
    看google的C++风格指南,里面有点以java的概念来人为限制c++
    caoyue
        6
    caoyue  
       2013-09-11 10:57:01 +08:00
    最后几句有点问题
    实际上很多区别是出于静态语言和动态语言的特性,而不是简单的语法糖和人为限制
    hustlzp
        7
    hustlzp  
    OP
       2013-09-11 11:46:49 +08:00
    @pyKun
    @pyKun
    @holmesabc 懂了,不是一个层面上的东西,而是静态语言的特点。
    wwqgtxx
        8
    wwqgtxx  
       2013-09-11 20:37:41 +08:00 via Android
    只是静态语言的限制而已,比如不像python可以随便覆盖系统类库,在java中是不可能的,还有很多特性也是。好处是限制的越死,错误率越低,执行效率越高。至于那个好用,自己看着办吧。总之不要想写py代码那么随便,有一个好的ide(比如eclipse)打开语法检查,自动提醒,对初学者可以极大地加快初学速度
    wwqgtxx
        9
    wwqgtxx  
       2013-09-11 20:41:42 +08:00 via Android
    而且我认为,只要程序逻辑没有问题,jdt会在在编译期间解决80%的bug,对开发大型项目有很大帮助。
    还有就是类库的兼容性比py好的多,py24 py27 py33之间的类库经常不兼容,java的兼容性绝对是超级好
    hustlzp
        10
    hustlzp  
    OP
       2013-09-11 21:16:31 +08:00
    @wwqgtxx 确实,以前只会Python就对静态语言比较看不起,现在越来越觉得各有千秋!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2281 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 00:58 · PVG 08:58 · LAX 17:58 · JFK 20:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.