访问不同类的arraylist?

时间:2012-04-04 07:13:09

标签: java inheritance arraylist polymorphism

Member class =超类SeniorMember class =子类JuniorMember class = sub class

是否可以在不同的类中使用相同的arraylist来存储成员?

“Commiittee class”有一个arraylist来添加和删除只有资深成员

“社会阶层”有一个arraylist存储所有成员,添加和删除高级成员和初级成员。

他们可以共享相同的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();
        }
    }
}

我应该如何为社会阶层写这个委员会成员使用相同的arraylist?

3 个答案:

答案 0 :(得分:0)

超类中的静态arraylist

答案 1 :(得分: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以接受SpecialMember,则您仍然会公开超类“add(Member)版本。

答案 2 :(得分:0)

我使用ArrayList设置你的Society类。然后按照社会使用ArrayList的方式创建一个使用Society的委员会类。要获得委员会成员的列表,您将获得社会的完整列表(从ArrayList获取)并仅保留委员会成员。添加委员会成员意味着确保其在社会实例中,必要时添加它,然后获取它并将其标记为委员会成员。这里有一些繁忙的工作,但它很简单。此外,您可能希望社会和委员会类实现相同的接口,因此您的代码的其他部分无需知道他们是在与委员会成员,普通成员,甚至是其他组完全交往(但确实实现了接口)。

如果这是一个非常大的社会,你可能想要保留一个单独的委员会成员名单,但需要同步。例如,一个委员会实例需要在其社会界面中添加一个监听器,以便在一个委员会成员的情况下捕获所有删除。我认为你现在不想打扰它。