第一章:对象简介
对象有状态、行为、标识。
类与数据类型区别:
类实际上是一种数据类型。它们的区别在于:类是程序员为解决特定问题而定做的,而数据类型是为了表示机器的存储单元而设计的,它是现成的,是程序员无可奈何时的选择。
面向对象编程的挑战之一就是:如何在问题空间的元素与解决空间的对象之间建立一种一对一的映射。
可以向每个对象发送请求,这样才能让对象为你解决问题,但每个对象只能满足某些请求,具体能够满足哪些请求呢?这是由对象的
接口(interface)所定义的。决定接口的是对象的类型。接口只管你能向对象发送什么请求,但还必须要有满足这一请求的代码,这些代码以及隐藏着的数据,组成了
实现(implementation)
将对象做为服务的提供者
隐藏实现:将程序分为类的创造者(class creator)和客户程序员(client programmer).访问控制符:public,private,protected.public表示后面跟着的东西谁都能用。而private表示除非是类的创建者用这个类的方法进行访问,否则没人能访问到这个元素。protected很像private,它们的区别在于,继承类能够访问 protected成员但是不能访问private成员。Java还有一个“缺省”的访问权限。通常称为package访问权限。国为同属这个 package的类可以访问这个package中其它类的“缺省权限”的成员。但是出了这个package,它们就都是private的了。
复用实现(合成):在一个类中用另一个类创建对象,为了能让新的类提供我所设计的功能,它可以由任意多个,任意类型的对象,以任意形式组合在一起。由于你是用已有的类来合成新的类,因此这一概念被称为合成。如果这个对象是动态合成的,通常称为聚合。通常交合成称为“有(has-a )"关系。
继承:(复用接口)当你继承一个类时,你也创建了一个新类,这个新的类不仅包含了已有类的所有成员,更重要的是它复制了基类的接口,于是所有能够传给基类的消息也都可以传给派生类。
你有两种办法来区分新的派生出来的类和那个原来的基类。第一种方法很简单:直接往派生类里加新的方法。这些新的方法不属于基类的接口。也就是说由于基类不能完成所有的工作,你必须加上更多的方法。第二种方法是在新的类中修改基类方法的行为,这被称为覆写(override)那个方法。要覆写一个方法直接在类中重新定义这个方法就行了。
多态性:多态性指的是相关的对象按照各自类型来实现方法的能力。继承性指的就是派生类(子类)继承抽象类(基类、父类),它是一种类特殊化的方式,用于联系派生类和抽象类。在这里我把这两个特点一起举例说明一下。在魔兽里,四个种族都有农民,而且属性和方法基本一样,那我们就可以为农民这个概念设置一个基类,然后将每族农民设为一个子类。每个子类方法的类型可能不一样。在运行时,通过判定对象所属的类型再去执行相应类型所对应的方法的。所以多态性与继承是紧密关联的。
抽象类与接口(abstrcat与interface): 通常在有些设计方案中,你只想让基类去表示由其派生出的类的接口。也就是你不想让人创建一个基类的对象,而只是想把对象上传给它,以期能使用这个类的接口。这样你就需要使用abstract关键词来把这个类做成抽象类。编译器会阻止任何人创建abstrcat的对象。abstrcat 关键词也可以用来表示这个方法还没有实现--它就象是一个声明”由这个类所派生出的所有类都有这个方法,但是它的实现不在这里“。abstrcat方法只能存在于abstrcat类里。如果有个类继承了这个abstrcat类,那么它要么实现这个方法,要么也是一个abstrcat类。abstrcat方法能让你将方法放到接口而不必为它写一些无意义的代码。interface关键词更是对abstrcat类的概念的深化,它不允许你实现任何方法。如果你愿意你可以继承多个接口,因为要继承多个常规或是抽象类是不允许的。