私はそのようなクラスを持っています:
abstract class Person{void toDrink(Liquid l);}
class Liquid{}
class Alcohol extend Liquid{}
class Milk extends Liquid{}
class Adult extends Person{void toDrink(Liquid l){}}
class Child extends Person{void toDrink(Liquid l){}}
Child と Adult には引数として Liquid を使用せず、Milk と Alcohol をそれぞれ引数として取りたいのですが、抽象メソッドを正確に Liquid 引数でオーバーライドする必要があります。だから私が書くとき
Person child = new Child();
child.toDrink(new Alcohol());
子供は飲酒の口実としてアルコールを摂取することができます。この問題は Exceptions または if() を使用して解決できますが、これらの関係のより良い設計についてアドバイスをお願いします。メソッド toDrink() (アルコールから子供へ、または牛乳から大人へ) に間違った引数を渡すと、IDE が実行しようとすると間違いとコンパイル エラーとして下線が引かれます。