2014-11-17 2 views
1

ProjectilesProjectile의 arrayList입니다. Laser처럼 Projectile의 몇 가지 하위 클래스가 있습니다. 여기에서 발사체를 다른 함수로 전달하려고합니다.수퍼 클래스 배열에서 하위 클래스로 전달

void checkProjectiles() { 

    for (int index=0; index<Projectiles.size(); index++) { 
     if (sq(Projectiles.get(index).xPos - posX) + sq(Projectiles.get(index).yPos - posY) < sq(size)) { //if within the a circle radius of size from centre of roid 
     Projectile checkProjectile = Projectiles.get(index); 
     collision(checkProjectile); 
     } 
    } 
    } 

내 문제는 대신 collision(Laser laser)에가는,이 기능에 Laser의 인스턴스를 전달할 때 대신 collision(Projectile projectile)로 이동한다는 것입니다. 객체를 특정 하위 클래스의 인스턴스로 전달하려면 어떻게해야합니까?

+0

기본 클래스에 대한 충돌 메서드를 갖고 하위 클래스에서 재정의 할 수 있습니까? 이 방법은 당신이 전달한 하위 클래스 객체가 해당 충돌 메서드를 호출합니다. – dragon66

+0

@ dragon66 이것은 실제로 내가 좋아했을 것입니다. 그러나 이것을 수업 과제로 지정하고 강사는이 이벤트를 처리하기 위해 오버로드 된 메서드를 사용해야한다고 주장했습니다. 그는 저에게 '방문자의 딜레마'를 찾아 보라고 말했습니다. – Andrew

+0

어쨌든, 더 많은 하위 클래스 유형을 추가 할 때 대답이 제시 한 방법은 유지 보수의 악몽이 될 것입니다. – dragon66

답변

1

문제는 프로그램과 관련하여 Projectiles의 모든 것을 하위 클래스가 아닌 Projectile로만 해결할 수 있다는 것입니다. 이 문제를 처리 할 수있는 몇 가지 방법이 있지만 가장 간단한 방법은 충돌 내에서 처리하는 것입니다. Projectile 타입의 객체를 넘겨 줄 것을 기대하고 instanceof 메소드를 사용하여 메소드 내에서 분리한다.

비교 연산자와 클래스 유형의 예는 여기를 참조하십시오. Check if an object belongs to a class in Java

다형성과 유용한 인터페이스 인 인터페이스를 읽어야합니다.

관련 문제