関数を使用して計算を実行するブロックがあります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;
}
}
にがないためread()、Blockこれはコンパイルされません。クライアントの場合、「パブリック」ブロックインターフェイスで十分readです。内部的にのみ必要です。ブロックインターフェイスに追加readすることもできますが、これは間違っていると感じます。
Blockには複数の異なる実装があるため、への呼び出しの前ににキャストsrcすることはできません。ABlockImplread
「隠す」ための別の方法はありreadますか?