関数を使用して計算を実行するブロックがあります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
することはできません。ABlockImpl
read
「隠す」ための別の方法はありread
ますか?