2012-04-04 21 views
0

Member类=超类SeniorMember类=次级类JuniorMember类=次级类访问不同类中的数组列表?

是否有可能在不同的类相同的数组列表存储成员?

“Commiittee类”具有一个ArrayList来添加和删除仅seniormember

“社会类”具有一个ArrayList来存储所有成员,添加和移除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(); 
     } 
    } 
} 

我应该怎么写,为社会类使用相同的ArrayList在此committeemember类?在超

+0

你是什么意思“全班有阵列”?这是委员会的超级类别吗? – Yuval 2012-04-04 07:16:14

回答

0

静态的ArrayList如果我理解正确,你正在实施一个类环绕的集合,你想影的收集处理方法之一。在这种情况下,它应该是这样的:

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

0

+0

嗯,我想是这样的,社会阶层正在把所有成员都包括在高级和低级成员中,只有委员会成员正在包揽高级成员。所以我需要以委员会扩大社会的方式去做? – 2012-04-04 07:56:12

+0

你的措辞对我来说有点困惑。你有一个'SocietyCommittee'包含各种'Member's,一个'ManagementCommittee'类仅包含'SeniorMember's,但与'SocietyCommittee'类共享所有功能?听起来这是一个很好的理由,使用“管理委员会扩展SocietyCommittee”,或者至少让他们都扩展了一个共同的基础类,例如, 'Committee'。 – Yuval 2012-04-04 08:09:23

0

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

如果这是一个非常大的社会,您可能希望保留一个单独的委员会成员名单,但它需要同步。例如,一个委员会实例需要添加一个Listener到它的社会接口中,以捕获所有的删除,例如,如果一个委员会是委员会成员。我认为你现在不想打扰。