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?
答案 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获取)并仅保留委员会成员。添加委员会成员意味着确保其在社会实例中,必要时添加它,然后获取它并将其标记为委员会成员。这里有一些繁忙的工作,但它很简单。此外,您可能希望社会和委员会类实现相同的接口,因此您的代码的其他部分无需知道他们是在与委员会成员,普通成员,甚至是其他组完全交往(但确实实现了接口)。
如果这是一个非常大的社会,你可能想要保留一个单独的委员会成员名单,但需要同步。例如,一个委员会实例需要在其社会界面中添加一个监听器,以便在一个委员会成员的情况下捕获所有删除。我认为你现在不想打扰它。