Java学习记录-4.多态

多态致力于分离做什么和怎么做。意味着一个类型可以同时指代多种类型。

向上转型

把某个对象的引用视为对其基类的引用,即是向上转型。

在方法中把形参定义为基类,应用向上转型,只需一个方法,就可以作用于基类和其所有的导出类。如基类Instrument,子类为Wind,那么将方法定义为tune(Indtrument),tune方法也就适用于Wind类(tune(Wind)),日后如果再定义一个导出类也不用再额外定义或修改tune方法了。

由于后期绑定的原因,甚至可以把一个导出类的对象引用赋予给一个一个基类引用,在运行时编译器会自动选定使用导出类的方法的。

在数组中也可以利用向上转型定义一个包含各种子类的基类数组。                                                                                                                                                                                                                         

向上转型是绝对安全的,因为导出类一定大于等于基类,基类的方法在导出类中一定存在。

注意,向上转型并不适用于实例域,final方法和static方法,由于private方法是自动final的,切对导出类不可见,故向上转型即便同名也并不会覆盖基类的private方法,极有可能会错误调用到基类方法。

构造器在导出类的创建过程中是逐级向上调用的,以为只有上一级的构造器才有权限初始化上一级自有的实例域。导出类构造器会默认调用基类的默认构造器,除非用super()指定。

更纯粹的继承就是基类与导出类的方法完全一样,这种关系是is-a关系,但更灵活的方式是导出类扩展方法,这被称为is-like-a关系,但扩展出来的方法并不能在向上转型后被使用,若要使用,只能向下转型,这将涉及到RTTI。

posted @ 2018-04-14 15:49  超级猿  阅读(100)  评论(0编辑  收藏  举报