Java 在不同的类中访问arraylist?
Java 在不同的类中访问arraylist?,java,inheritance,arraylist,polymorphism,Java,Inheritance,Arraylist,Polymorphism,Memberclass=super classSeniorMemberclass=sub classJuniorMemberclass=sub class 是否可以在不同的类中使用相同的arraylist来存储成员 “Committee类”具有仅可添加和删除seniormember的arraylist “Society类”具有用于存储所有成员的arraylist,以及添加和删除seniormember和juniormember 它们可以共享同一个arraylist吗?怎么做的 import ja
Member
class=super classSeniorMember
class=sub classJuniorMember
class=sub class
是否可以在不同的类中使用相同的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();
}
}
}
import java.util.*;
公共班级管理委员会{
私有数组列表;
公共管理委员会(){
smlist=新的ArrayList();
}
公共无效添加委员会成员(高级成员sm){
smlist.add(sm);
}
公共成员搜索(字符串smName){
for(高级成员sm:smlist){
如果((sm.getName()).equals(smName)){
返回sm;
}
}
返回null;
}
公共布尔RemoveCommitteeMber(字符串smName){
SeniorMember tmp=搜索(smName);
如果(tmp!=null)
返回smlist.remove(tmp);
其他的
返回false;
}
公共字符串toString(){
for(高级成员sm:smlist){
返回“Name:+sm.getName()+”\n地址:+sm.getAddress()+”\n请参阅:+sm.getFee();
}
}
}
我应该如何编写才能让society类在此committeemember类中使用相同的arraylist?超类中的静态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
}
}
import java.util.ArrayList;
公共类HelloWorld{
静态类成员{
}
静态类成员扩展成员{
}
静态班委员会{
私有ArrayList_members=新ArrayList();
公共无效添加(成员){
_成员。添加(成员);
}
}
静态班级管理委员会{
公共无效添加(成员){
如果(!(高级成员的成员实例)){
抛出新错误(“此处仅限高级成员”);
}
增补(成员);
}
}
公共静态void main(字符串[]args){
成员=新成员();
SeniorMember senior=新的SeniorMember();
委员会=新委员会();
管理委员会管理=新的管理委员会();
委员会.增加(成员);
委员会增补(高级);
管理。添加(成员);
management.add(高级);//抛出运行时错误
}
}
请注意,如果您重写方法
add
以接受SpecialMember
,您仍然会公开超类“add(Member)
版本。我会使用ArrayList设置您的社会类。然后创建一个委员会类,该类以社会使用ArrayList的方式使用社会。要获得委员会成员的名单,您可以从Society(从ArrayList获得)获得完整的名单,并且只保留委员会成员。添加委员会成员意味着确保其在社会实例中,如果必要,添加它,然后获得它并将其标记为委员会成员。这里有点忙,但很简单。此外,您可能希望Society和Committee类实现相同的接口,这样代码的其他部分就不需要知道它们是否与委员会成员、普通成员甚至其他一些团体打交道(但这确实实现了接口)
如果这是一个非常大的社会,您可能希望保留一个单独的委员会成员列表,但它需要同步。例如,委员会实例需要在其Society接口中添加一个侦听器,以便在一个是委员会成员的情况下捕获所有删除。我想你现在不想为这个烦恼。你说的“整个类都有一个数组列表”是什么意思?这是委员会的超类吗?嗯,我想是的,社会阶层把所有成员都包括在高级和初级成员中,只有委员会成员阶层把高级成员包括在内。所以我需要以委员会扩展社会的方式来做?你的措辞让我有点困惑。您有一个
SocietyCommittee
,它拥有各种成员
s,还有一个ManagementCommittee
类,它只拥有资深成员
s,但与SocietyCommittee
类共享所有功能?使用ManagementCommittee扩展SocietyCommittee
,或者至少让它们都扩展一个公共基类,例如Committee
,这听起来是一个很好的理由。