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

我会使用 ArrayList 设置您的 Society 课程。然后创建一个使用 Society 的委员会类,就像 Society 使用 ArrayList 一样。要获得委员会成员的列表,您需要从 Society 获得完整列表(从 ArrayList 获得)并只保留委员会成员。添加委员会成员意味着确保其在 Society 实例中,必要时添加它,然后获取它并将其标记为委员会成员。这里的工作有点忙,但很简单。此外,您可能希望 Society 和 Committee 类实现相同的接口,以便您的代码的其他部分不需要知道它们是在处理委员会成员、普通成员,还是完全与其他组打交道(但这确实实现了接口)。

如果这是一个非常大的社会,您可能希望维护一个单独的委员会成员列表,但它需要同步。例如,委员会实例需要在其 Society 接口中添加一个 Listener 以捕获所有删除,以防万一是委员会成员。我想你现在不想打扰这个。

于 2012-04-05T16:51:45.957 回答
0

超类中的静态数组列表

于 2012-04-04T07:18:44.963 回答
0

如果我理解正确,您正在实现一个类来包装一个集合,并且您想隐藏其中一个集合处理方法。在这种情况下,它应该是这样的:

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

请注意,如果您覆盖该方法add以接受 aSpecialMember您仍然会公开超类的add(Member)版本。

于 2012-04-04T07:36:27.550 回答