如何在 Java 中为特殊的 "multiple inheritance" 情况定义 类 和接口

How to define classes & interfaces in Java for a special "multiple inheritance" situation

给定一个我无法更改的标准 class(greenfoot Actor;警告:我对 java 或 greenfoot 都不熟悉),我想创建两个子 classes代表可运输的货物和运输工具。

当运输工具(例如自行车)小到足以成为可运输商品时,问题就会出现。

class Transportation extends Actor {...}
class Truck extends Transportation {...}
interface Transportable {...}
class Container extends Actor implements Transportable {...}
class Bike extends Transportation implements Transportable {...}

现在如果我要定义load/unload商品的方法,在classTransportation中,参数class应该是什么?

void load (Transportable goods) {
    :
    /* not exactly sure about call of getworld(); it returns the "world" */
    World.getWorld().removeObject(goods) <- this is where an Actor is needed
    :
} 

对于 greenfoot 世界中的簿记(即哪些对象是 "inside the world",意思是在任何 Transportation 之外),我需要在 goods 上调用一个方法 [=18] =] 需要 Actor - 编译器正确地告诉我 Transportable 对象不是 Actor

但是接口 (Transportable) 不能继承自 classes (Actor).

我在SO上看到的解决方案说让topclass(Actor,这里是有关联的接口,但是不控制top怎么办class?

编辑:根据要求在 load() 中添加了更多代码;添加了 class Truck

您将不得不对某些 classes 进行调整并创建新界面。

class Actor {
 // Use Greenfoot Actor class instead of this one
}

interface ITransportation {

    public void load(Transportable goods);
}

class Transportation extends Actor implements ITransportation{

    @Override
    public void load(Transportable goods) {

    }
}

class Truck extends Transportation{

}

interface ITransportable {

}

class Transportable extends Actor implements ITransportable {

}
class Container extends Transportable {

}

class HybridGood implements ITransportable, ITransportation {

    private Transportation transportation;
    private Transportable transportable;

    @Override
    public void load(Transportable goods) {
        transportation.load(goods);
    }
}
class Bike extends HybridGood {

}

通过这种方法,您将能够

  • 分享 Transportation 和 Transportable 的通用功能
    输入 HybridGoods class.
  • 您可以访问 Actor 输入 load/unload 方法。