如何在java中定义子类(基本继承)

时间:2014-11-10 14:34:18

标签: java inheritance

我一直在阅读java中的继承,我有一个相当简单的问题,我在手册页上找不到。

this为例。

我想先定义一个类:

Bycicle bike = new Bicycle();

后来我想说它是一辆山地自行车,所以它属于某个子类,并为山地自行车设置了一个属性(比如numberOfGears)。

这可能按此顺序吗?或者我是否需要立即说它是山地自行车?

3 个答案:

答案 0 :(得分:5)

如果您知道只使用Bycicle的方法,那么将变量声明并初始化为Bycicle

Bycicle bike = new Bicycle();

如果要更改类实现但仍然只使用Bycicle方法,则将变量声明为Bycicle并将其初始化为特定的类实现,在本例中为MountainBike

Bycicle bike = new MountainBike();

如果您知道将使用类实现的特定方法,那么您有两个选择:

  • 初始化为类实现,在需要从此类实现调用方法的特定部分中,使用向下转换:

    ((MountainBike)bike).mountainBikeMethod();
    

    我不推荐这种方法,因为如果你改变了初始化类的方法,那么在更改这些向下转换时你应该小心,否则你会得到RuntimeException,特别是ClassCastException用于向下转换为错误的课程。

  • 声明并初始化为类实现,然后忘记使用超类类型,因为那不是你需要的:

    MountainBike bike = new MountainBike();
    

答案 1 :(得分:0)

如果你想说这是一辆山地自行车,你需要创建一个MountainBike实例,而不仅仅是自行车。然后你可以垂头丧气。但这看起来有点不自然,所以要么首先将自行车称为MountainBicycle,要么使用适配器设计模式将其改装为山地自行车。

答案 2 :(得分:0)

类中的实例化对象以后不能更改为其他类。

无论如何,MounteinBike仍然是一辆自行车。然后你可以这样做:

Bycicle bike = new MountainBike();

MountainBike mountainBike = new MountainBike();

当可能被优先使用更高级别的抽象时,在这种情况下是第一个例子。