java五个基本特征:
(1) 所有东西都是对象。
(2)程序是一大堆对象的组合;通过消息传递,各对象知道自己该做些什么。
(3) 每个对象都有自己的存储空间,可容纳其他对象。封装
(4) 每个对象都有一种类型。
(5) 同一类所有对象都能接收相同的消息。
接口,上溯造型,封装,多态,有利于解耦。
new 一个对象,然后将结果赋值给句柄,通过句柄调用对应方法。
控制成员的访问:
第一个原因是防止程序员接触他们不该接触的东西——通常是内部数据类型的设计思想。若只是为了解决特定的问题,用户只需操作接口即可,毋需明白这些信息。
第二个原因是允许库设计人员修改内部结构,不用担心它会对客户程序员造成什么影响。
控制访问:public,private,protected 以及暗示性的 friendly修饰关键字。
继承:基础类 衍生类 都具有相同的接口。
改善基础类方式:1.根据具体需求添加新的方法2.重写方法
当衍生类只改善基础类的函数,衍生类的一个对象换成基础类的一个对象!------>等价关系
当衍生类添加新的函数,基础类访问新添加的函数。----->类似关系
将衍生类的对象当作基
础类的一个对象对待。忽略类型的特定细节,只与基础类打交道。程序具备了“扩展能力”,具有“扩展性”。
例子:
void doStuff(Shape s) {
s.erase();
// ...
s.draw();
}
Circle c = new Circle();
Triangle t = new Triangle();
Line l = new Line();
doStuff(c);
doStuff(t);
doStuff(l);
对于doStuff函数的参数接口可以说是上溯造型。衍生类型当作它的基本类型处理的过程叫作“Upcasting”(上溯造型)。
在将 draw()消息发给一个匿名 Shape 时,根据 Shape 句柄当时连接的实际类型,会相应地采取正确的操作。
将一条消息发给对象时,如果并不知道对方的具体类型是什么,但采取的行动同样是正确的,这种情况就叫作“多形性”(Polymorphism)。对面向对象的程序设计语言来说,它们用以实现多形性的方法叫作“动态绑定”。编译器和运行期系统会负责对所有细节的控制。
抽象:
基础类只为自己的衍生类提供一个接口。abstract 关键字。抽象方法也许只能在一个抽象类里创建。继承了一个类后,那个方法就必须实现,否则继承的类也会变成“抽象”类。通过创建一个抽象方法,我们可以将一个方法置入接口中,不必再为那个方法提供可能毫无意义的主体代码。
interface(接口)关键字将抽象类的概念更延伸了一步,它完全禁止了所有的函数定义。“接口”是一种相当有效和常用的工具。
java不支持多继承,但是可以实现多个接口。
对象创建时间和销毁:
c++:
存储以及存在时间可在编写程序时决定,只需将对象放置在堆栈(有时也叫作自动或定域变量)或者静态存储区域即可。这样便为存储空间的分配和释放提供了一个优先级。
java:
在一个内存池中动态创建对象,该内存池亦叫“堆”或者“内存堆”。若采用这种方式,除非进入运行期,否则根本不知道到底需要多少个对象,也不知道它们的存在时间有多长,以及准确的类型是什么。存储空间的管理是运行期间动态进行的,所以在内存堆里分配存储空间的时间比在堆栈里创建的时间长得多(在堆栈里创建存储空间一般只需要一个简单的指令,将堆栈指针向下或向下移动即可)。
集合于继承器:
“集合”亦叫作一个“容器”;其中包括集、队列、散列表、树、堆栈等。
如果是一个数组形式的实体,比如一个矢量(Vector),那么也许能用索引运算符或函数。
不是话,使用一个“继续器”(Iterator),它属于一种对象,负责选择集合内的元素,并把它们提供给继承器的用户。
Java 最开始(在 1.0 和 1.1 版中)提供的是一个标准继承器,名为 Enumeration(枚举),为它的所有集合类提供服务。Java 1.2 新增一个更复杂的集合库,其中包含了一个名为Iterator的继承器,可以做比老式的Enumeration更多的事情。
选择集合:
集合提供了不同的接口类型以及外部行为(堆栈的接口与行为与队列的不同);不同的集合在进行特定操作时往往有不同的效率(矢量(Vector)和列表(List)的区别。
对矢量(相当于数组)内的元素进行的随机访问(存取)是一种常时操作;链接列表中,若想到处移动,并随机挑选一个元素,就需付出“惨重”的代价。)。
在设计阶段,我们可以先从一个列表开始。最后调整性能的时候,再根据情况把它换成矢量。由于抽象是通过继承器进行的,所以能在两者方便地切换,对代码的影响则显得微不足道。
单根结构:
在 Java 中(与其他几乎所有 OOP语言一样),对这个问题的答案都是肯定的,而且这个终级基础类的名字很简单,就是一个“Object”。
一个单根结构,加上所有对象都在内存堆中创建,可以极大简化参数的传递。
利用单根结构,我们可以更方便地实现一个垃圾收集器。与此有关的必要支持可安装于基础类中,而垃圾收集器可将适当的消息发给系统内的任何对象。
下溯造型与模板/通用性:
“下溯造型”(Downcasting)。很难保证下溯造型的安全进行。但这也不是绝对危险的,因为假如下溯造型成错误的东西,会得到我们称为“违例”(Exception)的一种运行期错误。(try-catch)
对于集合使用特制的,即使用泛型方式避免集合中的下溯造型的异常,类型转化,也就是强转。