2012-03-09 4 views
0

私は継承を使って作業しており、問題が発生しました。私は非常にスーパーとコマンドを拡張し、多分私はちょうど行方不明の構文で明らかなエラーがあります。基本的に私は5つのクラス、1つのスーパークラス、3つのサブクラス、1つのテスタークラスを持っています。私がテスタークラスを動かそうとするまで、そしてデータを見つけて変数をインスタンス化することを望むまでは、null値が戻ってきました。私はこれが私がそれらを宣言した方法に問題があるのか​​、それとも単に私のスーパークラスとサブクラスに問題があるのか​​を知る必要があります。あなたがこれに対して与えることができるアドバイスは非常に高く評価されます。継承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値を持つようにし、これらの値とその関連メソッドを静的に宣言すると、これはあなたのために損なわれます。

+0

@deporter:まだ、私はちょうど静的なミスに気づいた。あなたの答えはたぶん彼の質問に答えましたが(1 +あなたに)、私はおそらく彼の次の**質問に答えたので、私の答えを無効にしません。あなたのコメントがどんな目的に役立つのか分かりません。 –

1

スーパークラスのコンストラクタは、取得する値を決して割り当てません。

+0

@deporter:彼はあなたとほぼ同じ時間に作られました。これに慣れ、彼の良い答え(私がやったように)を上げる。 –

+0

ありがとうございました。私は以前に2度だけ継承を使用していますが、どちらのインスタンスもこれを必要としませんでした。私が読まなければならないもう一つのことだと思います。 – Sh0gun

関連する問題