2012-03-09 8 views
0

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

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

Супер: 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 

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

ответ

2

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

+0

Спасибо, это имеет смысл. – Sh0gun

1

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

например,

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, и объявление этих значений и связанных с ними методов static портит это для вас.

+0

@deporter: еще нет, я только что заметил статические ошибки. Ваш ответ, вероятно, ответил на его вопрос (1+ к вам), но это не отменяет моего ответа, поскольку я, вероятно, ответил на его ** следующий вопрос. Я не уверен, в чем цель вашего комментария. –

1

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

this.firstName = firstName; 
+0

@ deporter: его было сделано примерно в то же время, что и ваше. Привыкайте к этому и проголосуйте за него за хороший ответ (как я это сделал). –

+0

Спасибо, а я использовал наследование только два раза раньше, и ни один из них не требовал этого. Полагаю, это еще одна вещь, которую я должен буду прочитать. – Sh0gun

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