如何在 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 方法。
给定一个我无法更改的标准 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 方法。