2016-10-12 3 views
-5

Я хочу реализовать классы, Food и FoodFactory так, чтобы они удовлетворяли следующим входам и выводам.Как сделать object.getClass(). GetName() в Java

//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. написать только два класса Food и FoodFactory
  2. Только java.util * допускается

Что я делаю не так. знаете, как сделать getClass().getName() работающих в различной ситуации. Я могу получить только FoodFactory.

Спасибо!

+2

Что вы пробовали до сих пор в вашей реализации классов? это довольно прямая проблема и запахи домашней работы –

+0

Если кто-нибудь может указать какую-то ссылку, это очень признательно! – kww

+0

https://www.tutorialspoint.com/java/java_object_classes.htm –

ответ

0

Похоже, вы практикуете ОО с Java. Лучше, если вы спросите, а не полный сценарий.

Тем не менее, я вставлю образец здесь, и вы можете задать любое сомнение, которое у вас есть. Класс 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()); 

Попробуйте сыграть с ним и понять.

+0

Спасибо. Я следовал твоей идее, последние две строки вывода хороши. Но 'System.out.println (f1.getClass(). GetSuperclass(). GetSimpleName()); ' – kww

+0

У меня есть ошибка: FoodFactory.java: 69: ошибка: не удается найти символ System.out.println (f1.getClass(). GetSuperClass(). GetSimpleName()); ^ символ: метод getSuperClass() местоположение: Класс Класс где CAP # 1 свежий тип переменной: CAP # 1 распространяется Питание от захвата? extends Food 1 error – kww

+0

Теперь я знаю, это должно быть getSuperclass() :) – kww

Смежные вопросы