2016-12-06 8 views
-2

私は、銀行をモデルにしたミニプロジェクトを完了する必要があります。銀行には支店があり、支店ごとに従業員のリストを管理しています。 Teller、Clerk、Salesの3種類の従業員がいます。 ブランチクラスでは、スタッフを作成して保存する必要があります。私の支店クラスでJavaで別のクラスコンストラクタを呼び出す

は、私はそれは私が必要とする従業員を作成するよう事務員のコンストラクタを呼び出すようにしようとしています、そして私は、ArrayListのにこの店員のインスタンスを格納したい:

public void addStaff(String id, String name) { 
    this.id = id; 
    this.name = name; 
    Clerk clerk = new Clerk(id, name); 
} 

と私のクラーククラスでそれはclerk2など、店員インスタンス を作成するプラスの代わりに、各インスタンスを呼び出し、clerk1ているように見えるdoenst

public Clerk(String id, String name) { 
    this.id = id; 
    this.name = name; 
} 

で、インスタンス名として渡される名前を使用する方法はありますか?アレイの場合

、私はあなたが配列に店員のインスタンスを割り当てる必要があり、それに

// constructor 
public Branch(String branchName) { 
    this.branchName = branchName; 
    ArrayList<Object> staff = new ArrayList<Object>(); 
+6

アレイに保存する方法を教えてください – UDKOX

+7

深刻な助けが必要な場合は、有効な[mcve]を投稿してください。 –

+0

'Clerk c = new Clerk(" 01 "、" Natalie ")' - > Clerkクラスのコンストラクタを呼び出したところです。 – progyammer

答えて

0

ブランチにあるリストに新しい従業員を追加するだけで済みます。したがって

1)addStaff、remove this.id = id、およびthis.name = nameを変更します。支店は従業員の詳細を知る必要はありません。

2)コンストラクタで作成した配列に従業員を追加します。ブランチはこの新しい従業員で満たされます。

結果:

public void addStaff(String id, String name) { 
    Clerk clerk = new Clerk(id, name); 
    staff.add(clerk); 
} 

3、最も重要な)すべての従業員(事務員、出納係、販売を行います)は、一般的な「従業員」クラスを拡張し、ちょうどそのクラスにコンストラクタを追加します。この場合、ブランチでスタッフ配列を変更します。

private final List<Employee> staff;  

public Branch(String branchName) { 
    this.branchName = branchName; 
    staff = new ArrayList<Employee>(); 
} 

この違いに注意してください。コンストラクターの内部でのみスタッフリストを作成していると、参照が失われます。 staff配列はクラスの属性でなければなりません。だからあなたはあなたのaddStaffメソッドで使うことができます。

+0

従業員は抽象Employeeクラスから継承しますが、Employeeコンストラクタがどのように見えるかについて混乱します。助けてくれてありがとう – user2904400

+0

問題なし、ちょうど答えを受け入れるpls。 Employeeコンストラクタに関しては、Clerkクラスとまったく同じです。しかし、店員クラスなどでは、次のようにします。 public Clerk(String id、String name){ super(id、name) } 'superはスーパークラスコンストラクタを使用します。'あなたの店員クラスは 'public class Clerk extends Employee'のように定義する必要があります。 –

0

をインスタンスをプッシュするつもりでした。コードの例は

public void addStaff(String id, String name) { 
this.id = id; 
this.name = name; 
Clerk clerk = new Clerk(id, name); 
this.yourArrayList.add(clerk); 
} 

です。また、コンストラクタを確認する必要があります。 ArrayList<Object> staff = new ArrayList<Object>();そのスコープ外のスタッフのコンテンツにアクセスする場合は、それをクラス属性にする必要があります。

関連する問題