2012-04-04 4 views
0

Memberクラス=スーパークラスSeniorMemberクラス=サブクラスJuniorMemberクラス=サブクラス別のクラスのarraylistにアクセスしますか?

それはメンバーを保存するために別のクラスに同じ配列リストを持つことは可能ですか?追加で、すべてのメンバーを格納しseniormemberとjuniormemberを除去するためのArrayListを有するのみseniormember

「社会クラス」を追加および削除するためのArrayListを有する

「Commiitteeクラス」。

同じarraylistを共有できますか?どうしたの?

import java.util.*; 

public class ManagementCommittee{ 

    private ArrayList<SeniorMember> smlist; 

    public ManagementCommittee(){ 
     smlist = new ArrayList<SeniorMember>(); 
    } 

    public void addCommitteeMember(SeniorMember sm){ 
     smlist.add(sm); 
    } 

    public SeniorMember search(String smName){ 
     for (SeniorMember sm : smlist){ 
      if ((sm.getName()).equals(smName)){ 
       return sm; 
      } 
     } 
     return null; 
    } 

    public boolean removeCommitteeMember(String smName){ 
     SeniorMember tmp = search(smName); 
     if (tmp != null) 
      return smlist.remove(tmp); 
     else 
      return false; 
    } 

    public String toString(){ 
     for (SeniorMember sm : smlist){ 
      return "Name : " + sm.getName() + "\nAddress : " + sm.getAddress() + "\nFee : " + sm.getFee(); 
     } 
    } 
} 

このクラスメンバークラスで同じアライリストを使用するには、どのように社会科目を書く必要がありますか?私が正しくあなたを理解している場合、スーパークラス

+0

「全体的なクラスにはアーリーリストがあります」とはどういう意味ですか?これは委員会のスーパークラスですか? – Yuval

答えて

0

静的ArrayListには、あなたは、コレクションの周りにラップするクラスを実装している、あなたは、コレクションの取り扱い方法のいずれかをシャドウしたいと思います。あなたはSpecialMemberあなたはまだadd(Member)バージョンをスーパークラスをさらすことと思いを受け入れる方法addをオーバーライドする場合は、その

import java.util.ArrayList; 

public class HelloWorld { 
    static class Member { 
    } 

    static class SeniorMember extends Member { 
    } 

    static class Committee { 
     private ArrayList<Member> _members = new ArrayList<Member>(); 

     public void add(Member member) { 
      _members.add(member); 
     } 
    } 

    static class ManagementCommittee extends Committee { 
     public void add(Member member) { 
      if (!(member instanceof SeniorMember)) { 
       throw new Error("Only senior members here"); 
      } 
      super.add(member); 
     } 
    } 

    public static void main(String[] args) { 
     Member member = new Member(); 
     SeniorMember senior = new SeniorMember(); 
     Committee committee = new Committee(); 
     ManagementCommittee management = new ManagementCommittee(); 

     committee.add(member); 
     committee.add(senior); 

     management.add(member); 
     management.add(senior); // throws a run-time error 
    } 
} 

注:その場合は、それはのようなものでなければなりません。

0

+0

こんにちは、私はそう思う、社会クラスは上級および上級メンバーのすべてのメンバーをラッピングしています、委員会メンバークラスだけが上級メンバーをラッピングしています。だから私は委員会が社会を広げるようにする必要があるのですか? –

+0

あなたのフレーズは私にとってはちょっと混乱します。あなたはあらゆる種類のメンバーを保持する 'SocietyCommittee'と' SeniorMember'だけを持ち、 'SocietyCommittee'クラスと機能を共有する' ManagementCommittee'クラスを持っていますか?これは、「マネジメント委員会が社会委員会を拡張する」ことを使用する正当な理由のようであり、少なくとも両者に共通の基盤クラス(例えば、 「委員会」。 – Yuval

0

私はあなたのSocietyクラスをArrayListを使って設定したいと思います。 SocietyがArrayListを使う方法を学会で使う委員会のクラスを作ってください。委員会メンバーのリストを取得するには、Society(ArrayListから取得)の全リストを取得し、委員のみを保持します。委員会メンバーを追加するということは、ソサエティのインスタンスでそれを確認し、必要に応じて追加し、それを保持して委員としてマークすることを意味します。ここでは少し忙しい仕事がありますが、それは簡単です。また、社会と委員会のクラスが同じインターフェースを実装して、コードの他の部分が委員会メンバー、普通のメンバー、または他のグループ全体を扱っているかどうかを知る必要はありません(しかし、インターフェースを実装しています)。

これが本当に大きな社会であれば、委員会のメンバーのリストを個別に管理したいかもしれませんが、それを同期させる必要があります。委員会のインスタンスは、委員会メンバーの場合など、すべての削除をキャッチするために、リスナーをSocietyインタフェースに追加する必要があります。私はあなたが今それを気にしたくないと思う。

関連する問題