코드가 내게 전혀 의미가 없습니다. 나는 그것이 당신이 원하는 것이 무엇인지 이해한다고 생각합니다. 먼저 코드를 살펴 보겠습니다.
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
에는 g3
및 g2
이라는 두 개의 다른 거위가 포함되어 있습니다 (거위의 부모에게 아마도 참고로 사용 된 경우는 예외이지만 그럴 듯하지는 않습니다). 난 당신이 원하는 생각하고 당신이 그것을 달성하는 방법은 무엇
는 : 당신은 각각의 거위는 각 거위에 대한관련 회원이 당신의 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
, g2
및 g3
이동할 수 있습니다 : 그것은 (동물 인터페이스는 eat()
방법을 선언 가정)과 같이 수 main
방법의 link
목록 범위를 넓히기 위해 main
을 포함하는 클래스의 속성으로 만들 수도 있습니다. 전역 액세스가 필요한 경우이를 포함하는 singleton 클래스를 만들 수 있습니다 (또는 public static
어딘가에 만들 수도 있지만 다른 접근 방법을 권장합니다). Duck
클래스가 올바르게 Animal
인터페이스를 구현하는 경우
또한 목록에 Duck
를 추가 할 수 있습니다
link.add(new Duck());
가 Animal
인터페이스라는 공용 메서드를 선언하는 경우 eat
이제 목록을 반복하고 모든 만들 수 있습니다 동물들은 먹는다 :
for(Animal a : link) {
a.eat();
}
내가 무엇인가 놓쳤을지라도 자유롭게 이야기해라.
출처
2013-05-21 23:57:53
MAV
나는 당신의 질문이 무엇인지 이해하기 어렵습니다. 소스 코드가 형식화되어 있고 구문 오류가없는 경우 (예 :'new ArrayList;)는'... new ArrayList ();'끝에 괄호를 붙여야 잠재적 인 응답자를 도울 수 있습니다). –
Nick
대답은 "예"라고 생각합니다. 인터페이스를 유형 매개 변수로 사용할 수 있습니다. 일반적으로이 질문에 대답하는 가장 좋은 방법은 직접 시도하는 것입니다. – jpmc26
명확히하는 데 도움이되는 많은 코드가 누락되었습니다. Nick이 정리를 제안하고 완료하면 아마도 도움이 될 것입니다. 귀하의 코드가 귀하의 질문과 일치하지 않는 것 같습니다. 본질적으로 "나는 다음을 할 수 있을까?"라는 질문에 다음 코드가 어떤 오리도 먹지 않으며 어떤리스트에서도 오리를 제거하지 않으므로 No로 대답 할 것입니다. – galford13x