0

Memberクラス = スーパークラス SeniorMemberクラス = サブクラス クラス JuniorMember= サブクラス

メンバーを格納するために、同じ配列リストを別のクラスに持つことは可能ですか?

上級会員だけを追加・削除する配列リストを持つ「委員会クラス」

シニアメンバーとジュニアメンバーを追加および削除して、すべてのメンバーを格納するための配列リストを持つ「社会クラス」。

同じ配列リストを共有できますか? それはどのように行われますか?

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();
        }
    }
}

このコミッティメンバー クラスで同じ配列リストを使用するには、社会クラスに対してどのように記述すればよいですか?

4

3 に答える 3

0

スーパークラスの静的配列リスト

于 2012-04-04T07:18:44.963 に答える
0

ArrayList を使用して Society クラスをセットアップします。次に、Society が ArrayList を使用する方法で Society を使用する委員会クラスを作成します。委員会メンバーのリストを取得するには、Society (ArrayList から取得) から完全なリストを取得し、委員会メンバーのみを保持します。委員会メンバーを追加するということは、Society インスタンスにあることを確認し、必要に応じて追加し、それを取得して委員会メンバーとしてマークすることを意味します。ここには少し忙しい作業がありますが、簡単です。また、Society クラスと Committee クラスに同じインターフェイスを実装して、コードの他の部分が委員会メンバー、通常のメンバー、または他のグループ全体を扱っているかどうかを知る必要がないようにすることもできます (ただし、インターフェイスは実装されます)。

これが非常に大規模な協会である場合、委員会メンバーの別のリストを維持したい場合がありますが、同期する必要があります。委員会インスタンスは、たとえば委員会のメンバーである場合にすべての削除をキャッチするために、Society インターフェイスにリスナーを追加する必要があります。私はあなたが今それを気にしたくないと思います。

于 2012-04-05T16:51:45.957 に答える
0

私の理解が正しければ、あなたはコレクションをラップするクラスを実装しており、コレクション処理メソッドの 1 つを隠したいと考えています。その場合、次のようになります。

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 
    }
}

メソッドをオーバーライドしてadda を受け入れる場合でも、スーパークラスのバージョンSpecialMemberを公開していることに注意してください。add(Member)

于 2012-04-04T07:36:27.550 に答える