有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在不同的类中访问arraylist?

Member类=超级类SeniorMember类=子类JuniorMember类=子类

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

“Committee类”具有仅可添加和删除seniormember的arraylist

“Society类”具有用于存储所有成员的arraylist,以及添加和删除seniormember和juniormember

它们可以共享同一个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) 个答案

  1. # 1 楼答案

    我会用ArrayList建立你的社会课。然后创建一个委员会类,该类以社会使用ArrayList的方式使用社会。要获得委员会成员的名单,您可以从Society(从ArrayList获得)获得完整的名单,并且只保留委员会成员。添加委员会成员意味着确保其在社会实例中,如果必要,添加它,然后获得它并将其标记为委员会成员。这里有点忙,但很简单。此外,您可能希望Society和Committee类实现相同的接口,这样代码的其他部分就不需要知道它们是否与委员会成员、普通成员甚至其他一些团体打交道(但这确实实现了接口)

    如果这是一个非常大的社会,您可能希望保留一个单独的委员会成员列表,但它需要同步。例如,一个委员会实例需要在其Society接口中添加一个侦听器,以捕获所有删除(如果一个是委员会成员)。我想你现在不想为此烦恼

  2. # 2 楼答案

    超类中的静态arraylist

  3. # 3 楼答案

    如果我理解正确的话,那么您正在实现一个类来包装一个集合,并且您希望对其中一个集合处理方法进行阴影处理。在这种情况下,应该是这样的:

    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)版本