我一直在阅读java中的继承,我有一个相当简单的问题,我在手册页上找不到.
就拿这个例子.
我想先定义一个类:
Bycicle bike = new Bicycle();
Run Code Online (Sandbox Code Playgroud)
后来我想说它是一辆山地自行车,所以它属于某个子类,并为山地自行车设置了一个属性(比如numberOfGears).
这可能按此顺序吗?或者我是否需要立即说它是山地自行车?
如果您知道您只使用Bycicle方法,那么将变量声明并初始化为Bycicle:
Bycicle bike = new Bicycle();
Run Code Online (Sandbox Code Playgroud)
如果要更改类实现但仍然只使用Bycicle方法,则将变量声明为Bycicle并将其初始化为特定的类实现,在本例中,MountainBike:
Bycicle bike = new MountainBike();
Run Code Online (Sandbox Code Playgroud)
如果您知道将使用类实现的特定方法,那么您有两个选择:
初始化为类实现,并且在您需要从此类实现中调用方法的特定部分中,使用向下转换:
((MountainBike)bike).mountainBikeMethod();
Run Code Online (Sandbox Code Playgroud)
我不推荐这种方法,因为如果你改变初始化类的方式,那么在更改这些向下转换时你应该小心,否则你会得到RuntimeException,特别是ClassCastException为了向下转换到错误的类.
声明并初始化为类实现,然后忘记使用超类类型,因为这不是你需要的:
MountainBike bike = new MountainBike();
Run Code Online (Sandbox Code Playgroud)