У меня есть такие классы:Java наиважнейшая абстрактный метод проектирования стратегия
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){}}
Я хочу ребенок и взрослые не принимать жидкости, как аргументы, но молоко и алкоголь соответственно, но я должен переопределить абстрактный метод с точно Жидким аргументом. Поэтому, когда я пишу
Person child = new Child();
child.toDrink(new Alcohol());
ребенок может принимать алкоголь в качестве аргумента для питья. Я могу решить эту проблему, используя Исключения, или если(), но я прошу вас советовать мне лучший дизайн для этих отношений. Я хочу это, когда я передаю неправильный аргумент методу toDrink() (от алкоголя до ребенка или молока для взрослых), моя IDE подчеркивает это как ошибку и ошибку компиляции, когда я пытаюсь запустить ее.
немного от темы, но: if 'toString()' превращает объект в строку, что делает 'toDrink()' do? –
Во-первых: добро пожаловать в StackOverflow. На ваш вопрос: если вы хотите, чтобы IDE обрабатывала эту абстракцию, не требуется, потому что тогда расширение не будет возможным. Вы используете только «абстрактный класс», если вы ничего не знаете об этом во время компиляции. –
вы можете использовать instanceof здесь, чтобы проверить, на каком экземпляре он фактически указывает. – tejas