2011-02-15 4 views
0

이 숙제가 저에게 요구하는 것이 무엇인지 이해하지 못합니다 ...LinkedList ... 상속 ... 무엇?

마지막 프로젝트에서 우리는 사람 (또는 사람들의 인스턴스) 배열을 만든 person.java 클래스를 만들었습니다. 신분증, 엄마, 아빠, 생년월일, 자녀 수, 자녀가 많습니다. 그것은 엄마 또는 아빠를 얻거나 설정하고, 아이를 추가하고, 아이를 제거하고, 엄마 또는 아빠를 설정 해제하고, 다른 인스턴스가이 인스턴스의 자식인지 아닌지를 확인하고, 섹스를 얻고, ID를 얻는 것과 같은 예측 가능한 방법을 가졌습니다. 그 것이었다.

어쨌든 ...이 프로젝트의 요점은 각 개인 수업에 대해 무제한의 아동 수를 허용하도록 마지막 프로젝트를 약간 변경하는 것입니다. 마지막 프로젝트는 허용 가능한 최대 자식 수를 10으로 설정하는 정적 int 변수를가집니다.

이렇게하려면 목록을 구현해야합니다. 그리고 java.util.LinkedList의 서브 클래스가 될 personlist.java라는 다른 클래스를 작성하십시오. 우리는 Person.java를 PersonList.java를 생성하는 동일한 프로젝트에 저장하여 compler가 java.util.LinkedList를 인식 할 수있게해야합니다. PersonList 클래스는 사람의 자식을 추가/제거/찾는 것과 관련된 모든 메서드를 투명하게 처리해야합니다. PersonList는 LinkedList의 하위 클래스이므로 모든 LinkedList 메서드를 사용할 수 있습니다.

어디서부터 시작해야할지 모르겠다. 나는 아직도 나의 Person.java 클래스를 가지고있다. Eclipse를 사용하고 있습니다 ... 그래서 새로운 프로젝트를 만들었습니다. PersonList.java라는 클래스를 만들었습니다. Person.java라는 또 다른 클래스를 만들어 내 오래된 프로젝트를 복사했습니다.

새 클래스를 Person.java와 "통신"하도록 어떻게 선언합니까?

import java.util.LinkedList; 

public class PersonList extends LinkedList<Person> { 

} 

맞습니까? 나는 또한 왜 우리가 Person.java를 수정하여 링크 된 목록을 사용하도록 말하지 않았는지 혼란 스럽다. 나는 그걸 할 수있어. PersonList.java라는 또 다른 클래스를 만드는 이유는 무엇입니까? 그리고 도대체 거기에 무슨 일이 생길까요? Person.java에서 PersonList.java의 메소드를 호출하려면 어떻게해야합니까?

어떤 통찰력이라도 대단히 감사하겠습니다!

+2

Marsha Marsha Marsha ... –

+0

쉐이크 타운 - 내가 잘못 선언하고 있습니까? 나는 솔직히 혼란스러워. – marsha

+0

브래디 뭉치 참조 일뿐입니다. 숙제는 연결된 목록과 상속을 모두 배우는 것으로되어 있다는 점을 제외하면 자유롭게 그것을 무시하십시오 :-) –

답변

2

Person 클래스에서 children 변수가 LinkedList 유형으로 전환되었습니다.

public class Person { 
    .... 
    private LinkedList<Person> children; 
    .... 
} 

문제의 일부를 빠뜨리지 않는 한 LinkedList 클래스를 확장 할 필요가 없습니다. 이 인스턴스에서는 상속보다 컴포지션을 원합니다.

아, 과제를 제출할 때 교수님에게 왜 솔루션을 선택했는지 알려주십시오.

+0

. 지금 ... 수여 된 ... 나는 지난 학기에 방금 프로그래밍을 시작했는데, 상속은 여기서 큰 의미를 갖지 않는 것 같습니다. 나는이 운동을 위해 머리를 감쌀 수 없습니다. – marsha

+0

@marsha : 당신이 맞지 않는다고 제안하는 것이 옳습니다. 상속은 기능을 확장하는 데에만 사용해야합니다. 예를 들어, 이름으로 사람을 찾고 싶다면 PersonList에만 해당되는 것이고 한 가지 방법은 LinkedList를 확장하고 새 메서드를 추가하는 것입니다 (다른 LinkedList 메서드는 계속 유지해야 함). 비어 있는).그러나 동일한 기능을 재사용하는 것만으로도 구문을 익히는 것 외에는 많은 점이 없습니다. –

+0

@Platinum Azure - 기능 추가, 즉 이름으로 검색하는 것이 중요합니다. 포스터가 하위 클래스를 만들고 LinkedList 메서드를 재정 의하여 불필요한 Person 추가/제거를 받아들이려고하면 어떻게 될까 ... 또한 LinkedList 제네릭 형식을 확장하고 LinkedList를 직접 확장하지 않아야합니다. 형식 지우기는 형식 매개 변수를 제거하고 LinkedList를 남겨 둡니다. (제 생각에는 ...) – mmccomb

0

LinkedList은 상속 용으로 설계되지 않았습니다. 전달보다을 전달하십시오.

+0

포워딩이란 무엇을 의미합니까? 집합? – orlybg