この場合、継承ではなくコンポジションを使用するか、人間を構成するさまざまなサブクラスを使用する必要があると思います。
私はあなたのロジックを理解していますが、BaseClass はコントラクトであり、そのタイプのすべてのクラスがこの動作に従うことを保証し、親メソッドを削除するサブクラスを持つことは大きな NO NO..
さまざまな例外をスローできますが、私はその道をたどりません。このように考えてみてください。たとえば、私が Human オブジェクトにアクセスする必要があるだけの開発者であるとします。特定の動作を期待すると、突然、インターフェイス メソッドを呼び出して、呼び出したという理由だけで例外を取得しますか?? 派生クラスの実装と、それらを呼び出すことができる場合とできない場合に注意する必要はありません。
以下にいくつかの解決策を示します。
Human を BasicHumanFunctions、VisionSystem などの構成物にします。そうすると、盲人はそれらのほんの一部しか持たないでしょう。
class Human {
private BasicHumanFunctions _basicFunctions; //contains breathe funcitonality.
private VisionSystem _vision; //contains see
}
class BlindMan {
private BasicHumanFunctions _basicFunctions;
}
人間の基本クラスに、すべての人間が呼吸を好むのと同じ動作のみを含めてから、HealthyHuman と BlindHuman などを作成し、それぞれ独自のメソッドを作成します。その後、HealthHuman を使用して、必要に応じてさらにサブクラス化できます。
class Human {
void breathe() {};
// other Human basic functions;
}
class HealthyHuman extends Human {
void see() {};
//other healthy human functions
}
class BlindHuman extends Human {
void useCane() {};
}
2 番目のケースでは、コンポジションを使用して動作を共有することもできます。
class BlindHuman extends Human {
private VoiceSubsystem _voice = new VoiceSybsystem();
void speaker() { _voice.speaker();}
}