J'ai ces classes:Java stratégie de conception dominante de méthode abstraite
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){}}
Je veux des enfants et des adultes de ne pas prendre liquide args mais le lait et l'alcool respectivement, mais je dois passer outre méthode abstraite avec l'argument exactement liquide. Donc, quand j'écris
Person child = new Child();
child.toDrink(new Alcohol());
enfant peut prendre l'alcool comme argument à boire. Je peux résoudre ce problème en utilisant Exceptions ou if(), mais je vous demande de me conseiller un meilleur design pour ces relations. Je le veux quand je passe un mauvais argument à la méthode toDrink() (alcool à l'enfant ou du lait à l'adulte) mon IDE le souligne comme une erreur et une erreur de compilation quand j'essaie de l'exécuter.
un peu hors sujet mais: si 'toString()' transforme un objet en String, que fait 'toDrink()'? –
Première: bienvenue sur StackOverflow. Pour votre question: si vous voulez que l'IDE gère cette abstraction n'est pas nécessaire car aucune extension ne sera possible. Vous n'utilisez que 'abstract class' si vous ne savez rien à ce sujet au moment de la compilation. –
vous pouvez utiliser instanceof ici pour vérifier à quelle instance il pointe réellement. – tejas