继承最重要的特征不在于它为新类提供了方法,而是它表达了新类同基类之间的关系。这种关系可以被归纳为一句话“新类就是一种原有的类”。这不是在空口说白话——语言直接给了支持。比方说,表示乐器的基类叫Instrument,然后有一个叫Wind的派生类。继承的意思就是基类的方法派生类都有,因此送给基类的消息也可以送给派生类。方法的代码可以用作于Instrument,以及Instrument的派生类,而将Wind的reference转换成Instrument的reference的这种做法就被为上传。
上传这个术语是有讲法的,它缘于类的继承关系图的传统画法:将根置于顶端,然后先下发展(当然,你也可以按照你的习惯来画。)Wind.java的继承关系图。把派生类传给基类就是沿着继承图往上送,因此被称为上传。上传总是安全的,因为你是把一个较具体的类型转换成较为一般的类型。也就是说派生类是基类的超集。它可能有一些基类所没有的方法,但是它最少要有基类的方法。在上传过程中,类的接口只会减小,不会增大。这就是为什么编译器会允许你不做任何明确的类型转换或特殊表示就进行上传的原因了。