2013-05-21 5 views
0

상속을 사용하여 비슷한 것을 보았지만 인터페이스를 사용하려고합니다. 다른 객체로 구성된 단일 arraylist를 만들고 싶습니다. 다음 개체를 포함하는 ArrayList | 오리, 오리, 거위, 오리, 거위, 돼지 | 나는 무작위로 오리와 거위를 추가 할 수 있습니다. 나는 이것을하기를 원한다. 예를 들면 내가 오리를 먹고 싶다고 말하면, 오리와 한 번 먹으면 다른 오리를 먹을 수 있고 각 아이템을 반복하고 "먹는"방법을 실행할 수있다.
| 다음과 같이 할 수있다. :인터페이스를 구현하는 다른 객체 목록

public interface Animal {..} 

public class Duck implements Animal(){} 

public class Goose implements Animal{ 
    List<Animal> link = new ArrayList<Animal>; 

Goose(Duck d){ 
    link.add(d); 
} 
Goose(Goose g){ 
    link.add(g); 
} 
Goose g3 = new Goose(new Duck); 
Goose g2 = new Goose(g2); 
} 

`

+4

나는 당신의 질문이 무엇인지 이해하기 어렵습니다. 소스 코드가 형식화되어 있고 구문 오류가없는 경우 (예 :'new ArrayList ;)는'... new ArrayList ();'끝에 괄호를 붙여야 잠재적 인 응답자를 도울 수 있습니다). – Nick

+1

대답은 "예"라고 생각합니다. 인터페이스를 유형 매개 변수로 사용할 수 있습니다. 일반적으로이 질문에 대답하는 가장 좋은 방법은 직접 시도하는 것입니다. – jpmc26

+0

명확히하는 데 도움이되는 많은 코드가 누락되었습니다. Nick이 정리를 제안하고 완료하면 아마도 도움이 될 것입니다. 귀하의 코드가 귀하의 질문과 일치하지 않는 것 같습니다. 본질적으로 "나는 다음을 할 수 있을까?"라는 질문에 다음 코드가 어떤 오리도 먹지 않으며 어떤리스트에서도 오리를 제거하지 않으므로 No로 대답 할 것입니다. – galford13x

답변

0

코드는 몇 가지 오류가 있습니다. 거위의 경우이 같은 작업을 수행 할 수 있습니다

public class Goose implements Animal { 
List<Animal> link = new ArrayList<Animal>(); 

Goose(Duck d){ 
    link.add(d); 
} 
Goose(Goose g){ 
    link.add(g); 
} 

public static void main(String... args){ 
    Goose g3 = new Goose(new Duck()); 
    Goose g2 = new Goose(g3); 
} 

은}

그것은 당신이 인터페이스 동물이있는 경우는 형 동물의 개체 목록을 작성하고 인스턴스 인 개체로 채울 수 있다는 것을 의미합니다 Animal (클래스는 Animal 인터페이스를 확장합니다).

알고 싶습니까?

+0

수정. 고맙습니다. 기본적으로 입력을 통해 자동으로 오리와 게이의 행을 만들고 싶습니다. 사용자가 numRows & numCols를 입력합니다. 각 열은 거위와 오리 개체를 배열 목록에 무작위로 채워서 각 동물을 하나씩 이동할 수 있습니다. 일단 당신이 첫 번째 동물을 먹으면, 당신은 두 번째로갑니다 ... –

1

코드가 내게 전혀 의미가 없습니다. 나는 그것이 당신이 원하는 것이 무엇인지 이해한다고 생각합니다. 먼저 코드를 살펴 보겠습니다.

Animal을 구현하는 Goose 클래스가 있습니다.

public class Goose implements Animal{ 
    List<Animal> link = new ArrayList<Animal>(); //remember(). 
    ... 

당신의 Goose 클래스의 각 인스턴스 동물의 목록을해야합니다 : 그럼 당신은 클래스의 link라는 목록이 있습니다. 이상하게 보입니다. 질문에서, 당신은 동물을 포함하는 1 개의 목록을 원하고 각 Goose 내의 목록은 원하지 않는 것 같습니다.

그런 다음 두 개의 생성자가 있습니다

Goose(Duck d){ 
    link.add(d); 
} 
Goose(Goose g){ 
    link.add(g); 
} 

필요한 중 하나 Duck 또는 새 Goose의 내부 목록에 추가 입력으로 Goose. 새로운 인스턴스는 각각 Duck 또는 Goose으로 시작합니다. 생성자가 add 메쏘드가되기를 원하는 것처럼 보입니다.

마지막으로 당신이 있습니다

Goose g3 = new Goose(new Duck()); //You were missing() here also 
Goose g2 = new Goose(g2);   //Syntax error. Should probably be ".. new Goose(g3);" 

당신이 당신의 Goose 클래스 내부에 이러한이 왜 완전히 확실하지 오전 그들은 다른 곳에서 선언 해야하는처럼 보인다. 지금은 각각 Goose에는 g3g2이라는 두 개의 다른 거위가 포함되어 있습니다 (거위의 부모에게 아마도 참고로 사용 된 경우는 예외이지만 그럴 듯하지는 않습니다). 난 당신이 원하는 생각하고 당신이 그것을 달성하는 방법은 무엇

는 : 당신은 각각의 거위는 각 거위에 대한관련 회원이 당신의 Goose 클래스를 수정해야합니다.

public static void main(String[] args) { 
    List<Animal> link = new ArrayList<Animal>(); 
    Goose g2 = new Goose(); 
    Goose g3 = new Goose(); 

    link.add(g2); 
    link.add(g3); 
    .. 

이 만 사용할 수 있습니다 이렇게 :

public class Goose implements Animal { 
    @Override 
    public void eat() { 
     // Om nom nom 
    } 
} 

그런 다음 main 방법 link, g2g3 이동할 수 있습니다 : 그것은 (동물 인터페이스는 eat() 방법을 선언 가정)과 같이 수 main 방법의 link 목록 범위를 넓히기 위해 main을 포함하는 클래스의 속성으로 만들 수도 있습니다. 전역 액세스가 필요한 경우이를 포함하는 singleton 클래스를 만들 수 있습니다 (또는 public static 어딘가에 만들 수도 있지만 다른 접근 방법을 권장합니다). Duck 클래스가 올바르게 Animal 인터페이스를 구현하는 경우

또한 목록에 Duck를 추가 할 수 있습니다

link.add(new Duck()); 

Animal 인터페이스라는 공용 메서드를 선언하는 경우 eat 이제 목록을 반복하고 모든 만들 수 있습니다 동물들은 먹는다 :

for(Animal a : link) { 
     a.eat(); 
    } 

내가 무엇인가 놓쳤을지라도 자유롭게 이야기해라.

+0

도와, 고마워요. 오류가있어서 미안 해요. 기본적으로 입력을 통해 자동으로 오리와 거위의 행을 만들고 싶습니다. 사용자가 numRows & numCols를 입력합니다. 각 행/열은 거위와 오리 개체를 배열 목록에 무작위로 채워서 각 동물을 하나씩 반복 할 수 있습니다. 일단 당신이 첫 번째 동물을 먹으면, 당신은 두 번째로 이동 .. 그래서 각 행과 열 iterating 동시에 배열 목록 던져 –

관련 문제