对象导论笔记-第四天 单根继承 容器 范型

08/19/2011

1.8单根继承结构

在OOP中,自C++面试以来就已经变得非常瞩目的一个问题就是:是否所有的类最终都继承自单一的基类。在Java中,答案就是:YES,这个终极基类就是Object

单根继承结构保证所有对象都具备某些功能。因此你知道,在你的系统中你可以在每个对象上执行某些基本操作。所有对象都可以很容易地在堆上创建,而参数传递也得到了极大的简化。

单根继承结构是垃圾回收器的实现变得容易得多,而垃圾回收器正是Java相对于C++的重要改进之一。由于所有对象都保证具有其类型信息,因此不会因无法确定对象的类型而陷入僵局。这对于系统级操作(如异常处理)显得尤其重要,并且给编程带来了更大的灵活性。

1.9容器

通常来说,如果不知道在解决某个特定问题时需要多少个对象,或者他们将存活多久,那么就不可能知道如何存储这写对象。这个问题的最简单的解决方案:创建另一种对象类型。通常被称为容器。在Java中,具有满足不同需要的各种类型的容器,例如:

  • List(用于存储序列)
  • Map(也被称为关联数组,用来建立对象之间的关联)
  • Set(没中对象类型只持有一个)

对容器有所选择有两个原因:

  1. 第一,不同容器提供了不同类型的借口和外部行为。
  2. 第二,不同容器对于某些操作具有不同的效率。

1.9.1参数化类型(范型)

在Java SE5出现之前,容器存储的对象都只具有Java中的通用类型:Object。要使用这样的容器,只需要在其中置入对象引用。但是由于容器只存储Object,所以当将对象引用置入容器时,它必须被向上转型(泛化)为Object而丢失其身份。这样就产生了问题:当把它取回时,怎样才能将它便会先前置入容器时具有实用借口的对象呢?这里再度用到了转型,这种转型的方式称为向下转型。注意:除非确切的知道索要处理的对象的类型,否则向下转型几乎是不安全的

那么,创建这样的容器,它知道自己所保存的对象的类型,从而不需要向下转型以及消除犯错误的可能,这样不是更有意义吗?这种解决方案被车给你为参数化类型机制。参数化类型就是一个编译器可以自动定制作用与特定类型上的类。

Java SE5的重大变化之一就是增加了参数化类型,在Java中它称为范型

ArrayList<Shape> shapes = new ArrayList<Shape>();