Поскольку ваши поля являются частными, что означает, что если вы не создать метод, который возвращает особое значение, которое вы ищете, когда объект экземпляра, ни один из ваших других классов или их методы смогут получить доступ к этим данным, следовательно, они являются частными.
Что вам нужно сделать, это создать «геттер» методы в вашем ProductionWorker
классе, что позволит вам сказать что-то подобное в вашем TeamLeader
классе:
shift = ProductionWorker.getShift();
Такого рода методы специально разработаны таким образом, что если вам нужно посмотреть поля объекта из другого класса, вы можете просто создать объект и использовать его метод для возврата значения. Вот то, что эти методы должны выглядеть следующим образом:
public int getShift()
{
return shift;
}
public double getHoursWorked()
{
return hoursWorked;
}
public double getRateOfPay()
{
return rateOfPay;
}
Поставив эти публичные методы в вашем суперкласса, вы сможете создать ProductionWorker в вашем TeamLeader
подкласса и использовать его методы для доступа к переменным экземпляра.
UPDATE
Ниже приведен пример кода, который может работать для вашего дела:
public class ProductionWorker extends Employee
{
private int shift;
private double rateOfPay;
private double hoursWorked;
ProductionWorker(String name, int id, int shift, double rateOfPay, double hoursWorked)
{
super(name, id);
this.shift = shift;
this.rateOfPay = rateOfPay;
this.hoursWorked = hoursWorked;
}
// Now we can add the "getters"
public int getShift()
{
return shift;
}
public double getHoursWorked()
{
return hoursWorked;
}
public double getRateOfPay()
{
return rateOfPay;
}
public class TeamLeader extends ProductionWorker
{
ProductionWorker prodWorker = new ProductionWorker(Jared, 10046, 2, 8.50, 12.6); // Creates a production worker you can reference
private int shift = prodWorker.getShift();
private double rateOfPay = prodWorker.getRateOfPay();
private double hoursWorked = prodWorker.getRateOfPay();
// These three statements demonstrate the getters and how they can be implemented
private double monthlyBonus;
TeamLeader(String name,int id, int shift, double rateOfPay, double hoursWorked, double monthlyBonus)
{
super(name, id , shift, rateOfPay, hoursWorked);
this.monthlyBonus = monthlyBonus;
}
public double calcPay()
{
double pay = 0;
//night shift
if (shift == 2)
{
pay = ((hoursWorked + hoursWorked/2) * rateOfPay) + monthlyBonus;
}
else
{
pay = (hoursWorked * rateOfPay) + monthlyBonus;
}
return pay;
}
}
Имейте в виду, что это не может быть идеальным решением для всего проекта, так как я не могу увидеть другие суперкласс, от которого вы распространяетесь, или что ваш клиент должен делать с этим кодом. Этот примерный код предназначен только для того, чтобы дать вам представление о том, как геттеры работают в классах, которые создают объекты и демонстрируют, как их можно использовать. Я определенно оставил бы геттеры, которые я задал для вас.
Также
Убедитесь, что для каждой переменной экземпляра у вас есть для объекта, вы должны иметь поглотитель для каждого из них. Вы обнаружите, что вам может понадобиться время от времени обращаться к этим данным, чтобы делать вычисления на клиенте.
Добавить getter и setter для ваших vatiables в 'ProductionWorker' и использовать это для доступа к переменным. – Jens
Знаете ли вы, что означает 'private', или вы использовали его, потому что кто-то сказал вам? – immibis