目前把梁勇的第一本书的面向对象,以及传智的Java基础到API和IO流之前的内容都看完了,写一点心得留在这里。

先是感叹:Java不愧能常年占据编程排行榜的第一名。实际使用过Java就会知道,严格的面向对象开发模式和完备的工业开发环境,让Java非常适合大规模项目和团队协作。相信很多通过动态语言入门,然后转到Java的人在最初敲下一些示例代码的时候就能够体会到。

C++的面向对象我基本没有接触过,但是在学习Java的过程中,从Python和JavaScript的知识迁移,带给了我很大的帮助。相比Python里类的透明以及很多魔法方法,Java的类更加清晰明确,通过访问控制符直接确定权限,不用折腾乱七八糟的魔法方法。访问控制符以及其他的修饰符其实是Java基础部分中很重要的内容。这里特别要提一下protect,自学的时候看的不是很懂,后来听了视频才知道,protect修饰的成员属性和成员方法,如果要在别的包的子类内使用,是指的只能写在子类的代码块里,而不是通过子类的对象进行调用,也就是说,对于其他包的程序来说,protect和private以及默认权限一样,都是不可访问的,只不过可以交给子类去使用,这样使得原来的类的安全性没有降低,而子类又可以访问,保留了扩展性。

抽象类与接口,当时在Python里也接触过ABC类的概念,但是理解显然就没有Java这么深刻和明晰了。动态语言由于封装了太多的抽象层次,确实适合用起来,但对于基本概念的解释,就不如静态语言那么清楚。Java的抽象类和接口,其实是将设计思想在程序内的集中体现。通过抽象类和接口,实际上将生活概念中的“源自” 和“添加”两个概念讲的非常清楚。抽象类以及继承,讲的是事物概念的发展过程;接口则对应是事物具体的功能变化以及如何与其他对象互动的关系。

还一个就是多态,当时一直没有搞清楚到底什么是多态,由于动态语言里边没有声明类型,所以更多的是关注方法的调用链也就是MRO的顺序。到了Java里边,有了声明类型,对于继承关系中谁是谁的对象,有了更明晰的指示和规范。多态这里要注意的就是,静态属性和方法,以及普通属性,都是参考父类,而方法则是优先使用子类重写的方法。所以多态,主要体现在行为上。多态的一大弊端或者说特点也要记住:不能够访问子类的特有内容。

好了,下一步开始看一些Java常用类的API。其实就是Java 标准库了,然后下一步就是泛型编程和IO流还有多线程了,学完这些就算弄完基础了。