Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在不同的类中访问arraylist?_Java_Inheritance_Arraylist_Polymorphism - Fatal编程技术网

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 class
SeniorMember
class=sub class
JuniorMember
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
,这听起来是一个很好的理由。