【发布时间】:2013-01-17 14:43:38
【问题描述】:
我有块使用函数step() 执行计算。块可以连接到
彼此与connect(Block)。
interface Block {
void connect(Block b);
void step();
}
但是,在具体的块实现中(例如在step 中)它应该是
可以从连接块read:
class ABlockImpl implements Block {
private Block src; // link to the block this block is connected to
public void connect(Block b) {
src = b;
}
public void step() {
double x = src.read(); // XXX src is of type Block and there is no read() in Block
/* ... */
}
public double read() {
return 3.14;
}
}
由于Block 中没有read(),因此无法编译。对于客户来说,“公共”块接口就足够了,我只需要在内部使用read。我可以将read 添加到 Block 界面,但对我来说这感觉不对。
由于 Block 有多种不同的实现,我不能在调用 read 之前将 src 转换为 ABlockImpl。
是否有“隐藏”read 的替代方法?
【问题讨论】:
-
请改写标题和问题,它具有误导性,我必须阅读 3 遍才能明白你的意思。
-
你有什么建议吗,我想的主要是如何措辞。
-
听起来你只是想让一个类实现两个不同的接口,但我认为你想要一个不公开的接口,对吗?
-
我不确定。我想我想要一个没有
read的公共接口,以及一种让块之间保持read的方式。 -
我不认为您可以或不想使用界面来执行此操作。客户端可以提供自己的 Block 实现,因此
read()必须是接口的一部分。听起来好像您想自己提供所有实现。因此,我建议您发布一个带有私有read()或其他内容的抽象类。