如何扩展类以从其他两个类中获取方法

时间:2017-01-17 23:15:06

标签: java inheritance

我有以下课程:

class Vehicle {
    public void Move() {
        System.out.println("Move");
    }
}

class Bike extends Vehicle {
    public void RideOnBackWheel() {}
}

class VehicleWithEngine extends Vehicle {
    public void EngineStart() {}
    public void EngineStop() {}
}

现在,我必须使用Bike和VehicleWithEngine中的方法创建类Motorbike,但它不起作用:

class Motorbike extends Bike, VehicleWithEngine {
    private boolean engine = false;

    @Override
    public void EngineStart() {
        engine = true;
        System.out.println("Engine started.");
    }

    @Override
    public void EngineStop() {
        engine = false;
        System.out.println("Engine stopped.");
    }

    @Override
    public void RideOnBackWheel() {
        if(engine) System.out.println("1 wheel");
    }

    @Override
    public void Move() {
        if(engine) System.out.println("Motorbike.move()");
    }
}

感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

在java中,你不能从两个类继承。您必须使用dict关键字将VehicleBikeVehicleWithEngine类更改为接口,而不是在摩托车类中使用od implements

extends

答案 1 :(得分:1)

看起来BikeVehicleWithEngine实际上没有实现。如果是这样,您可以将它们转换为接口并Motorbike实现两者:

interface Bike extends Vehicle {
    void RideOnBackWheel();
}

interface VehicleWithEngine extends Vehicle {
    void EngineStart();
    void EngineStop();
}

class Motorbike implements Bike, VehicleWithEngine {
    // implementations
}

如果BikeVehicle有无状态实施(他们不需要直接访问成员变量),您可以将它们转换为default methods,例如:

interface Bike extends Vehicle {
    default void RideOnBackWheel() {
        // implementation
    }
}

否则无法从两个课程扩展。请参阅链接的副本。