「shape」という抽象的な親クラスがあり、複数のサブクラス(三角形、正方形、円...)があるとします。すべてのサブクラスが実装する必要のある親の「shape」クラスに抽象メソッドを定義したいので、それを「draw」と呼びましょう。したがって、すべての形状サブクラスは「draw()」メソッドを提供する必要があります。ただし、drawメソッドは「Stencil」タイプのパラメーターを取り、すべての形状サブクラスが任意のステンシルだけを使用できるわけではありません。
したがって、1つの抽象的な「形状」クラス、複数の形状サブクラス、および複数のステンシルがあります。shapeクラスで定義されたdrawメソッドが必要です。正方形はStencil1を使用し、円はStencil2を使用する場合があります。
ジェネリックスでうまくいくと思いますが、よくわかりません。これらのクラスは他のクラスでも使用されるため、各形状サブクラスは特定のステンシルを使用して描画メソッドを定義する必要があります。コンパイラは、すべてのプログラマに、そのクラスでサポートされているステンシルを使用して描画メソッドを呼び出すように強制する必要があります。「publicabstractvoiddraw(Stencil s)」のような抽象メソッドを定義することはできません。これは、プログラマーが任意のステンシルをsquareクラスに渡すことができるのに対し、squareクラスは「Stencil1」のみをサポートするためです。
何か案は?
Update1: シェイプクラスはサブクラスで使用されるステンシルを気にしないことを追加する必要がありますが、サブクラスは他のクラスでも使用されるため、サポートされているステンシルのみがコンパイラによって受け入れられるようにdrawメソッドを定義することが重要です。 。