Почему моя заявка на наследство не работает?

Я делаю прошлую школьную работу, и речь идет о приложении для микроволновой печи с детским классом Clock. Каким-то образом где-то я запутался в своих кодах и полностью потерялся. Может ли кто-нибудь помочь мне с этим? Спасибо!

Первый класс часов.

class Clock extends Microwave {

private int hour;
private int minute;
private int second;

Clock()
{
    hour = 0;
    minute = 0;
    second = 0;     
}

Clock(int h, int m, int s)
{
    hour = h;
    minute = m;
    second = s;
}

public int getHour()
{
    return hour;
}

public int getMin()
{
    return minute;
}

public int getSec()
{
    return second;
}

public String toString()
{
    return (String.valueOf(second));
}

protected void tick()
{
    second++;

    if(hour == 23 && minute == 59 && second == 59)
    {
        hour = 0;
        minute = 0;
        second = 0;
    } else if(minute == 59 && second == 59)
    {
        hour++;
        minute = 0;
        second = 0;
    } else if(second == 59)
    {
        minute++;
        second = 0;
    }
}
}

Далее будет родительский класс, Микроволновая печь.

class Microwave {

private int maxPower;
private int currentPower;
private Clock theClock;

Microwave()
{
    maxPower = 500;
    currentPower = 500;
    theClock = new Clock();
}

Microwave(int maxp, Clock theClock)
{
    maxPower = maxp;
    currentPower = maxPower;
    theClock = new Clock();
}

public int getCurrentPower()
{
    return currentPower;
}

public int getMaxPower()
{
    return maxPower;
}

public String getTime()
{
    return "The time is " + theClock.getHour() + ":" + theClock.getMin() + ":" + theClock.getSec();
}

protected void cook(int p, int t)
{
    if(p < maxPower)
    {
        currentPower = p;
    } else
    {
        System.exit(0);
    }

    for(int i = 0; i < t; i++)
    {
        theClock.tick();
    }
}
}

Наконец, основной метод класса.

class TestMicrowave
{
 public static void main(String []args)
 { 
    Clock  c = new Clock(14, 30,30);
    Microwave  m = new Microwave(750, c);
    System.out.println("The microwave is currently at " + 
                     m.getCurrentPower() + " watts and "+ m.getTime());


     m.cook(600,45);    // should advance time to  14:31:15

     System.out.println(m.getTime());

     m.cook(800,45);    // shoudln't cook as power > maxPower
     System.out.println(m.getTime());

 }
 }

По-моему, что-то не так с моим методом getTime() в классе Microwave, но я понятия не имею, что с ним не так. Заранее спасибо!

3 ответа

Решение

Предложение наследования - мусор, вместо этого вы должны составлять часы (микроволновка может содержать часы, так как ваш класс микроволновок уже записан), поэтому отбросьте extends Microwave из вашего класса часов.

Если исключить эту проблему, другой проблемой являются ваши CTOR:

Microwave()
{
    maxPower = 500;
    currentPower = 500;
    theClock = new Clock();
}

Microwave(int maxp, Clock theClock)
{
    maxPower = maxp;
    currentPower = maxPower;
    //theClock = new Clock(); // you're passing a reference to this already, so by using this call you replace it with a new instance via the default ctor of Clock().
    this.theClock = theClock;
}

Часы НЕ являются детским классом. Микроволновая печь составлена ​​из часов. Удалите "расширяет микроволновку" из класса часов.

В этом дизайне не должно быть наследства.

Ваш конструктор, который принимает Clock Аргумент отбрасывает его, поэтому вы всегда начинаете с нуля часов.

Microwave(int maxp, Clock clock)
{
    maxPower = maxp;
    currentPower = maxPower;
    this.theClock = clock;
}
Другие вопросы по тегам