2015-01-13 2 views
1
public class WaterHeater{ 

    public double Kilowatts; 
    public double Water; 
    public double Joules; 
    public double Temp; 
    public double Jkg; 
    public double Energy; 
    public double Time; 

    //Constructor method 

    public WaterHeater (double Water, double Kilowatts, double Joules, double Temp, double Jkg) { 

    this.Water = Water; 
    this.Kilowatts = Kilowatts; 
    this.Joules = Joules; 
    this.Temp = Temp; 
    this.Jkg = Jkg; 
    } 

    //Accessor for Kilowatts 
    public double Kilowatts(){ 
    return Kilowatts; 
    } 

    //Accessor for Water 
    public double Water(){ 
    return Water; 
    } 

    //Method for Energy used 
    public double Energy(){ 
    Energy = Water*Jkg*Temp; 
    return Energy; 
    } 

    //Method for Time to boil 
    public double Time(){ 
    Time = Energy/Kilowatts; 
    return Time; 
    } 
    } 

//Test class 

public class Kettle extends WaterHeater{ 

    public static void main(String args[]) 
    { 

    WaterHeater Kettle = new WaterHeater(1, 2, 3600, 70, 4200); 

    System.out.println("\nWater: " +Kettle.Water + " L" + 
    "\nKilowatts: " + Kettle.Kilowatts + " KW"+ 
    "\nEnergy used: " +Kettle.Energy() + " J" + 
    "\nTime to boil: " +Kettle.Time() + " Seconds"); 


    } 

} 

Ошибка: Конструктор WaterHeater в классе WaterHeater не может применяться к данным типам. требуется: двойной, двойной, двойной, двойной, двойной не найдено: нет аргументов причин: фактические и формальные списки arqument различаются по длинеОшибка java: конструктор в классе не применяется

+3

Это просто код свалка. Какой у Вас вопрос? – Chris

+2

Изучите стандарты кодирования Java. Вы следуете соглашениям .NET/C#. Пожалуйста, объясните, пожалуйста, младшие члены класса. – duffymo

+3

Чайник не будет компилироваться, потому что конструктор no-arg по умолчанию не является общедоступным на WaterHeater, который он расширяет. – crowne

ответ

3

Есть много условностей неправильных с кодом, но проблема с вами код, который вы пытаетесь запустить, это нужно добавить в класс Kettle

public Kettle(double Water, double Kilowatts, double Joules, double Temp, double Jkg) { 
    super(Water, Kilowatts, Joules, Temp, Jkg);  
} 

Дополнительные указатели

Используйте CamelCase/строчные буквы для атрибутов вместе с частными, а не общественными

public double Kilowatts; 
public double Water; 
public double Joules; 
public double Temp; 
public double Jkg; 
public double Energy; 
public double Time; 

должно быть

private double kilowatts; 
private double water; 
private double joules; 
private double temp; 
private double jkg; 
private double energy; 
private double time; 

Использование Accessors and Mutators.

public double Kilowatts() { 
    return Kilowatts; 
} 

должен быть

public double getKilowatts() { 
    return kilowatts; 
} 
public void setKilowatts(final String kilowatts) { 
    this.kilowatts = kilowatts; 
} 

Основной класс также будет выглядеть следующим образом

public class Kettle extends WaterHeater { 

    public Kettle(double water, double kilowatts, double joules, double temp, double jkg) { 
     super(water, kilowatts, joules, temp, jkg);  
    } 

    public static void main(String args[]) { 

     WaterHeater kettle = new WaterHeater(1, 2, 3600, 70, 4200); 

     System.out.println("\nWater: " + kettle.getWater() + " L" + "\nKilowatts: " + kettle.getKilowatts() + " KW" + "\nEnergy used: " + kettle.getEnergy() + " J" 
      + "\nTime to boil: " + kettle.getTime() + " Seconds"); 
    } 
} 
+0

Спасибо большое. После добавления конструктора в класс Kettle он работал. Я также сделаю эти изменения. Что делает супер? Спасибо! –

+0

При расширении класса, подобного тому, который вы делали с помощью 'Kettle extends WaterHeater', он вызывает конструктор в этом расширенном классе. –

+0

После запуска программа не возвращала никаких значений (1,2,3600,70,4200). Любая помощь? –

0

Использование Kettle в качестве имени переменной и имя class не собирается работать хорошо.

Полезным соглашением (и за ним следуют Java-программисты) является использование camelCase для имен переменных (обратите внимание на нижний регистр c) и CamelCase для имен классов.

Так держать имя класса, как это, но переименовать переменную:

WaterHeater kettle = new WaterHeater(... 
+0

Это хорошее предложение, но не объясняет причину ошибки. –

+0

минус один? Если вы думаете, что я что-то пропустил, дайте мне знать. – Bathsheba

+0

Я считаю, что вступительного предложения достаточно. Не хотите слишком грубым, если ОП, вероятно, только начинается. – Bathsheba

2

Так как вы написали конструктор в WaterHeater, вы не можете расширить WaterHeater без написания конструктор для Kettle, который вызывает WaterHeater конструктор. Вы можете сделать это следующим образом:

public Kettle(double water, double kilowatts, double joules, double temp, double jkg) { 
    super(water, kilowatts, joules, temp, jkg); 
} 

Если, с другой стороны, вы просто хотите Kettle быть классом, который проверяет WaterHeater тогда вам просто нужно удалить слова extends WaterHeater.

+0

Спасибо, это работает! Существуют ли другие способы создания конструкторов? (поэтому они не должны быть написаны для других классов при использовании расширений) И что делает супер? Еще раз спасибо –

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