我想实现类Food
和FoodFactory
,以便它们满足以下输入和输出。
//Input:
FoodFactory ff = new FoodFactory();
Food f1 = ff.getFood('Fruit');
Food f2 = ff.getFood('Meat');
f1.serveFood();
f2.serveFood();
System.out.println(f1.getClass().getSuperClass().getName());
System.out.println(f1.getClass().getName());
System.out.println(f2.getClass().getName());
//Output:
I'm serving Fruit
I'm serving Meat
Food
Fruit
Meat
假设我们有以下约束:
Food
和FoodFactory
我不知道如何让getClass().getName()
在不同的情况下工作。我只能获得FoodFactory
。
谢谢!
答案 0 :(得分:0)
看起来你正在用Java练习一些OO。如果你怀疑而不是完整的情况,那就更好了。
但是我会在这里粘贴一个样本,你可以问任何疑问。 下面的FoodFactory类,请注意,对于名称,您将获得正确的对象。
public class FoodFactory {
public Food getFood(String food) {
if ("Meat".equals(food)) {
return new Meat();
} else if ("Fruit".equals(food)) {
return new Fruit();
}
throw new IllegalArgumentException("No food found with name " + food);
}
}
应该创建你的食物类,在这种情况下是肉类和水果。
public class Meat extends Food {
}
您的食物将根据当前课程打印信息。其他人将继承这种行为。
public class Food {
public void serveFood() {
System.out.println("I'm serving " + getClass().getSimpleName());
}
}
然后,您可以简单地运行您的场景,并注意getClass将针对正确的层次结构运行。
FoodFactory ff = new FoodFactory();
Food f1 = ff.getFood("Fruit");
Food f2 = ff.getFood("Meat");
f1.serveFood();
f2.serveFood();
System.out.println(f1.getClass().getSuperclass().getSimpleName());
System.out.println(f1.getClass().getSimpleName());
System.out.println(f2.getClass().getSimpleName());
尝试使用它并理解。