В моей программе у меня есть абстрактные классы Animal and Flower. Животные питаются цветами, но каждый Животные должны только есть определенный тип цветка (например, носороги едят только Розы, Черепахи едят тюльпаны).Подклассы в качестве аргументов абстрактного метода
Сейчас мой код в основном выглядит следующим образом:
public abstract class Animal {
abstract boolean eatFlower(Flower f);
}
public class Rhino extends Animal {
boolean eatFlower(Flower f) {
if(!(f instanceof Rose)) return false;
return (f.eaten = true);
}
}
public class Turtle extends Animal {
boolean eatFlower(Flower f) {
if(!(f instanceof Tulip)) return false;
return (f.eaten = true);
}
}
Я использую instanceof
для обеспечения соблюдения этого различия, где каждое животное ест только один тип цветка. Я хотел бы сделать это, изменив подписи метода черепах и носорогов до eatFlower(Tulip t)
и eatFlower(Rose r)
соответственно, но я не думаю, что это возможно на Java.
Есть ли лучший способ, чем использовать instanceof
, чтобы обеспечить соблюдение этого?