public interface Nameable {

    String getName();
    void setName (String aName);

}
---

public abstract class Mammal {

    public void generateHeat() {System.out.println("Wydziela ciepło");}

    public abstract void makeNoise();

}
---

public class Head {
    String size;
    public String getSize() {
        return size;
    }
    public void setSize(String aSize) { size = aSize;}
}
---

public class Dog extends Mammal implements Nameable {
    String name;
    Head head;
    public void makeNoise(){System.out.println("Szczekanie");}
    public void setName (String aName) {name = aName;}
    public String getName () {return (name);}
}
---

public class Planet {

    String planetName;
    public void getplanetName() {return planetName;};

}

public class Car {

    String carName;
    public String getCarName() { return carName;};

}

public class Dog {

    String dogName;
    public String getDogName() { return dogName;};

}
---

public class Planet implements Nameable {

    String planetName;

    public String getName() {return planetName;}
    public void setName(String myName) { planetName = myName;}

}

public class Car implements Nameable {

    String carName;

    public String getName() {return carName;}
    public void setName(String myName) { carName = myName;}

}

public class Dog implements Nameable {

    String dogName;

    public String getName() {return dogName;}
    public void setName(String myName) { dogName = myName;}

}
---

public abstract class Shop {
    CustList customerList;
    public void CalculateSaleTax() {
        System.out.println("Oblicza podatek od sprzedaży.");
    }
    public abstract String[] getInventory();
    public abstract void buyInventory(String item);
}
---

public class CustList {

    String name;

    public String findCust() {return name;}
    public void addCust(String Name){}

}
---

public interface Nameable {

    public abstract String getName();
    public abstract void setName(String name);

}
---

public class DonutShop extends Shop implements Nameable {
    String companyName;
    String[] menuItems = {
        "Pączki",
        "Babeczki",
        "Ciastko z owocami",
        "Kawa",
        "Herbata"
    };
    public String[] getInventory() {
        return menuItems;
    }
    public void buyInventory(String item) {
        System.out.println("\nZamówione rzeczy: " + item);
    }
    public String getName(){
        return companyName;
    }
    public void setName(String name){
        companyName = name;
    }
}
---

public class PizzaShop extends Shop implements Nameable {
    String companyName;
    String[] foodOfferings = {
        "Pizza",
        "Spaghetti",
        "Sałatka warzywna",
        "Anitpasto",
        "Calzone"
    }
    public String[] getInventory() {
        return foodOfferings;
    }
    public void buyInventory(String item) {
        System.out.println(“\nZamówione rzeczy: “ + item);
    }
    public String getName(){
        return companyName;
    }
    public void setName(String name){
        companyName = name;
    }
}
---

class TestShop {

    public static void main (String args[]) {
        Shop shop = null;
        String className = args[0];
        System.out.println("Tworzenie egzemplarza klasy:" + className + "\n");
        try {
          // new pizzaShop();
          shop = (Shop)Class.forName(className).newInstance();
        } catch (Exception e) {
          e.printStackTrace();
        }
        String[] inventory = shop.getInventory();
        // Lista zapasów w magazynie.
        for (int i=0; i<inventory.length; i++) {
            System.out.println("Argument" + i + " = " + inventory[i]);
        }
        // Kupowanie
        shop.buyInventory(Inventory[1]);
    }
}
