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

dor*_*ien 0 java inheritance

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

就拿这个例子.

我想先定义一个类:

Bycicle bike = new Bicycle();
Run Code Online (Sandbox Code Playgroud)

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

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

Lui*_*oza 5

如果您知道您只使用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)