继承最重要的特征不在于它为新类提供了方法,而是它表达了新类同基类之间的关系。这种关系可以被归纳为一句话“新类就是一种原有的类”。这不是在空口说白话——语言直接给了支持。比方说,表示乐器的基类叫Instrument,然后有一个叫Wind的派生类。继承的意思就是基类的方法派生类都有,因此送给基类的消息也可以送给派生类。方法的代码可以用作于Instrument,以及Instrument的派生类,而将Wind的reference转换成Instrument的reference的这种做法就被为上传。
继承最重要的特征不在于它为新类提供了方法,而是它表达了新类同基类之间的关系。这种关系可以被归纳为一句话“新类就是一种原有的类”。这不是在空口说白话——语言直接给了支持。比方说,表示乐器的基类叫Instrument,然后有一个叫Wind的派生类。继承的意思就是基类的方法派生类都有,因此送给基类的消息也可以送给派生类。方法的代码可以用作于Instrument,以及Instrument的派生类,而将Wind的reference转换成Instrument的reference的这种做法就被为上传。
一旦知道Java通过后绑定实现了多态的方法调用,你就可以只编写同基类打交道的代码了。因为你知道所有的派生类也能正确地使用这些代码。或者换一个说法,你“向对象发一个消息,让它自己判断该做些什么”。
例如基类被称作shape,它有好几个派生类:circle,square,triangle等等。这里先创建一个circle对象,接着马上把它的reference赋给了shape。看上去这像是一个错误(一种类型怎么能赋给另一种);但是由于circle是由shape派生出来的,circle就是一种shape,因此这种做法非常正确。所以编译器会毫不含糊地接受这条语句,什么错都不报。