给出一个抽象类
public abstract class AbstractStomach {
public abstract void consume(Food food);
}
我想要一些具有不同重载方法的具体类:
public class FruitStomach extends AbstractStomach {
public static class Apple extends Food {}
public static class Orange extends Food {}
@Override
public void consume(Apple food) {...}
@Override
public void consume(Orange food) {...}
}
public class MeatStomach extends AbstractStomach {
public static class Beef extends Food {}
@Override
public void consume(Beef food) {...}
}
上面的代码不起作用,因为它迫使我在每个具体类中实现泛型消费(Food)抽象方法.
但是我不希望具体的类实现消费(食物),因为它们已经由它们的重载变体来处理,实际上,每个具体的类应该只消耗不同的特定食物,而不是任何食物,所以
AbstractStomach stomach = new FruitStomach();
stomach.consume(new Beef());
应该给出错误.
如果我在抽象类中删除抽象方法,那么就没有必要让它们扩展抽象类,因为它没有为它们提供实现的指导.
你如何修复上面的设计,以便每个具体的类可以有他们的重载方法,但他们知道有一个抽象方法consume()来实现,但不需要实现consume(Food).
编辑
我可以在不使用重载的情况下解决上述问题,例如
public class FruitStomach extends AbstractStomach {
public static class Apple extends Food {}
public static class Orange extends Food {}
@Override
public void consume(Food food) {
if (food instanceof Apple) {
...
} else if (food instanceof Orange) {
...
} else {
// throws an error
}
}
}
但这不是我想要的.我想看到一个使用方法重载的解决方案.