我一直在阅读Java的继承,但有一个相当简单的问题,我在手册页上找不到。
以this为例。
我想先定义一个类:
Bycicle bike = new Bicycle();
稍后,我想说这是一辆山地车,因此它属于某个子类,并为山地车设置了属性专用项(例如numberOfGears)。
可以按此顺序吗?还是我要马上说是一辆山地车?
最佳答案
如果知道只使用Bycicle
的方法,则将变量声明为Bycicle
并将其初始化为:
Bycicle bike = new Bicycle();
如果要更改类实现但仍仅使用
Bycicle
方法,则将变量声明为Bycicle
并将其初始化为特定的类实现,在这种情况下为MountainBike
:Bycicle bike = new MountainBike();
如果您知道将使用类实现的特定方法,那么您有两种选择:
初始化为类实现,并且在特定部分中需要从该类实现中调用方法,请使用向下转换:
((MountainBike)bike).mountainBikeMethod();
我不推荐这种方法,因为如果您更改初始化类的方式,那么在更改这些向下转换时也要小心,否则您将得到
RuntimeException
,特别是ClassCastException
向下转换到错误的类。声明并初始化为类实现,然后忘记使用超类类型,因为这不是您所需要的:
MountainBike bike = new MountainBike();