第一章 对象导论
面向机器的编程语言:比如C,需要建立从问题空间到解空间的映射,需要掌握所谓的编程方法,这导致程序很难编写。
对求解问题建模的语言:比如LISP,限定性太强,超出特定领域,则力不从心。
面向对象的语言:比如Java,通用性强,不限于任何特定的问题。
对象:具有状态,行为和标识。即拥有内部数据,方法,和唯一的地址。
设计目的:因为可以自定义类,所以程序员可以灵活地定义类来适应问题,而不必*使用用来表示机器存储单元的数据结构。
每个对象都有一个接口interface,定义可以满足哪些请求。
将对象看做服务提供者:更加高内聚,避免将过多的功能塞到一个对象里。
Java的访问限定符:Public, Private, Protected(继承的类可以访问),还有一种默认的包访问权限,可以访问同一个包下的类的成员。
组合&继承区别:组合是在一个新类中创建了一个成员对象,继承则是将所有的特性和行为包含了。新类中可以再新定义方法is-like-a,或者覆盖原有方法is-a。
多态:在一些方法操作时,经常将对象当做其基类的对象来处理,然后在运行时动态确定泛化对象,Java中,这种动态绑定是默认的,C++要用virtual关键字。
从基类转成导出类,称为向上转型,这是安全的。
单根继承:Java类都继承自Object,这可以保证垃圾回收的实现,比C++要好,C++没有单根类。