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

2013-09-11 10:04:57 +08:00
 hustlzp
最近因为想折腾下Android App,所以在学Java。

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

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

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

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

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

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

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

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

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

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

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

这句略坑了哈。

抽象类与接口看做语法糖,这个理解不太好吧。
感觉coolshell里面说的,java的接口来填c++的坑,倒是有些道理的。
看google的C++风格指南,里面有点以java的概念来人为限制c++
caoyue
2013-09-11 10:57:01 +08:00
最后几句有点问题
实际上很多区别是出于静态语言和动态语言的特性,而不是简单的语法糖和人为限制
hustlzp
2013-09-11 11:46:49 +08:00
@pyKun
@pyKun
@holmesabc 懂了,不是一个层面上的东西,而是静态语言的特点。
wwqgtxx
2013-09-11 20:37:41 +08:00
只是静态语言的限制而已,比如不像python可以随便覆盖系统类库,在java中是不可能的,还有很多特性也是。好处是限制的越死,错误率越低,执行效率越高。至于那个好用,自己看着办吧。总之不要想写py代码那么随便,有一个好的ide(比如eclipse)打开语法检查,自动提醒,对初学者可以极大地加快初学速度
wwqgtxx
2013-09-11 20:41:42 +08:00
而且我认为,只要程序逻辑没有问题,jdt会在在编译期间解决80%的bug,对开发大型项目有很大帮助。
还有就是类库的兼容性比py好的多,py24 py27 py33之间的类库经常不兼容,java的兼容性绝对是超级好
hustlzp
2013-09-11 21:16:31 +08:00
@wwqgtxx 确实,以前只会Python就对静态语言比较看不起,现在越来越觉得各有千秋!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/82025

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX