如何在Java中执行object.getClass()。getName()

时间:2016-10-12 15:39:54

标签: java

我想实现类FoodFoodFactory,以便它们满足以下输入和输出。

//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

假设我们有以下约束:

  1. 只编写两个类FoodFoodFactory
  2. 仅允许java.util。*
  3. 我不知道如何让getClass().getName()在不同的情况下工作。我只能获得FoodFactory

    谢谢!

1 个答案:

答案 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());

尝试使用它并理解。