Наследование, возвращающее нулевые значения - PullRequest
0 голосов
/ 09 марта 2012

Итак, я работал с наследованием и столкнулся с проблемой. Я очень плохо знаком с супер и расширяю команды, и есть очевидная ошибка с синтаксисом, которую я просто пропускаю. В основном у меня 5 классов, один супер, три саба и 1 класс тестера. Все выглядело хорошо, пока я не попытался запустить класс tester, и там, где я надеялся найти данные, введенные при создании экземпляров переменных, я вместо этого получил нулевые значения. Мне нужно знать, если это проблема с тем, как я их объявил, или это просто проблема с моими супер и подклассами. Любой совет, который вы можете дать для этого, будет принята с благодарностью.

Чтобы не заполнять экран, я включил свои супер и подклассы в эту вставку:

Супер: http://pastebin.com/eZLXvknz

Sub1: http://pastebin.com/PFgApK3Y

Sub2: http://pastebin.com/QKDjB9g4

Вот мой класс тестера:

public class EmployeeTest {


public static void main(String[] args){

 Employee [] employeeArray = new Employee[3] ; 
 SalariedEmployee employee1 = new SalariedEmployee("Andrea", "Doroshenko", "111-111-111", 6, 2011, 2400); 
 CommissionedEmployee employee2 = new CommissionedEmployee("Nick", "McRae", "222-222-222", 1, 1998, 50000, 0.1);
 SalPlusCommEmployee employee3 = new SalPlusCommEmployee("Dan", "Mills", "333-333-333", 3, 2011, 1000, 0.05, 500 );

    employeeArray[0] = employee1;
    employeeArray[1] = employee2;
    employeeArray[2] = employee3;

    System.out.println(employee1.getEmployeeDetails());
    System.out.println(employee2.getEmployeeDetails());
    System.out.println(employee3.getEmployeeDetails());


}

//end main
}
//end class

Я полагаю, что проблема будет либо с тестером, либо с супер, но на всякий случай включены другие. Я знаю, что сейчас массив кажется бессмысленным, но он мне понадобится позже, поэтому он и есть. Еще раз спасибо за любую помощь, которую вы, ребята, можете оказать!

Ответы [ 3 ]

2 голосов
/ 09 марта 2012

В конструкторе Employee вы не инициализируете функции сотрудников. Это все. Инициализируйте их.

1 голос
/ 09 марта 2012

Конструктор вашего суперкласса никогда не назначает значения, которые он получает.Нет (например):

this.firstName = firstName;
1 голос
/ 09 марта 2012

Прежде всего: вытащите всю эту статичную чушь из ваших классов. Они не принадлежат, и они по-королевски все портят.

например.,

public class CommissionedEmployee extends Employee
{
    static double commRate;
    static double salesMade;

    public CommissionedEmployee(String firstName, String lastName, String SINNumber, int startMonth, int startYear, double salesMade, double commRate)
    {
        super(firstName, lastName, SINNumber, startMonth, startYear);
    }

    public static double getcommRate()
    { 
        return commRate;
    }
    public static double setcommRate()
    { 
        return commRate = setcommRate();
    }

    public static double getSalesMade()
    { 
        return salesMade;
    }
    public static double setsalesMade()
    { 
        return salesMade = setsalesMade();
    }

    public String getEmployeeDetails()
    {
        return ("This Employee is " + firstName + lastName + " this employee has the SIN " + sinNumber + "and is " + gender + ". This is a commisioned employee");
    }

    public double getEarnings()
    {
        return commRate * salesMade;
    }

}

Когда вы делаете переменную статической, вы говорите, что эта переменная будет содержать информацию, которая представляет состояние класса , а не объекты этого класса. Таким образом, каждый объект всегда будет иметь одинаковое статическое значение, а это не то, что вы хотите. Вы хотите, чтобы у CommissionedEmployee были его собственный commRate и его собственное значение salesMade, а объявление статических значений и связанных с ними методов разрушит это для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...