2012-04-04 3 views
0

Member 클래스 = 슈퍼 클래스 SeniorMember 클래스 = 서브 클래스 JuniorMember 클래스 = 서브 클래스다른 클래스의 arraylist에 액세스 하시겠습니까?

그것은 구성원을 저장하기 위해 다른 클래스에서 동일한의 ArrayList를 할 수 있습니까? seniormember juniormember과 추가만을 seniormember

"사회 클래스"모든 부재를 저장할 ArrayList를 갖는 제거, 추가와 제거 ArrayList를 갖는

"Commiittee 클래스".

그들은 같은 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(); 
     } 
    } 
} 
나는이 committeemember 클래스에서 같은 ArrayList를를 사용하는 사회 클래스 작성해야 어떻게

? 내가 제대로 이해하면 슈퍼 클래스

+0

"전체 클래스에 arraylist"가 있다는 것은 무엇을 의미합니까? 이것은위원회의 수퍼 클래스입니까? – Yuval

답변

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 
    } 
} 

주 당신이 SpecialMember은 여전히 ​​슈퍼 클래스 'add(Member) 버전을 노출 할 것 받아들이는 방법 add를 오버라이드 (override)합니다.

0

에서

+0

흠, 나는 그렇게 생각한다. 사회 계급은 고위급 및 중학생의 모든 구성원을 감싸고 있으며,위원회 멤버 클래스 만이 고위 구성원을 감싸고있다. 그래서위원회가 사회를 확장시키는 방식으로해야합니까? –

+0

당신의 말씨는 나에게 조금 혼란 스럽다. 당신은 모든 종류의'회원들 '을 보유한'사회위원회'와'상급 회원 만'사회 커뮤니 케이 션 클래스와 모든 기능을 공유하는'관리위원회 '클래스를 가지고 있습니까? '경영위원회 확장 사회위원회 '를 사용하는 좋은 이유 인 것처럼 들리거나, 최소한 둘 다 공통의 기본 계층, '위원회 '. – Yuval

0

ArrayList를 사용하여 Society 클래스를 설정했습니다. Society가 ArrayList를 사용하는 방식으로 사회를 사용하는위원회 수업을 만드십시오. 위원회 멤버 목록을 얻으려면 Society (ArrayList에서 가져옴)의 전체 목록을 가져 와서위원회 멤버 만 유지하십시오. 위원회 멤버를 추가한다는 것은 사회 인스턴스에서 필요한 경우 추가 한 다음이를 파악하고위원회 멤버로 표시한다는 의미입니다. 바쁜 일이 여기에 있지만 간단합니다. 또한, 사회 및위원회 클래스가 동일한 인터페이스를 구현하여 코드의 다른 부분이위원회 멤버, 일반 멤버 또는 다른 그룹 전체를 다루고 있는지 (즉 인터페이스를 구현하는지) 알 필요가 없도록 할 수 있습니다.

정말 큰 사회라면위원회 구성원을 별도로 유지하고 싶지만 동기화해야합니다. 위원회 인스턴스는 예를 들어위원회 멤버 인 경우 모든 제거를 포착하기 위해 소셜 인터페이스에 리스너를 추가해야합니다. 나는 당신이 지금 당장 그것에 귀찮게하고 싶지 않다고 생각합니다.

관련 문제