2013-09-22 2 views
0

나는 다른 승객 유형 같은 동물, 음식, 도구, 보물에 대한 Occupantextended Occupant classes라는 클래스가 있습니다.액세스 확장 클래스 메소드

모든 거주자는 GridSquares에 있으며, A 스퀘어는 3 명의 거주자까지 유지할 ​​수 있습니다.

탑승자 클래스는 위치가 부여 될 때 방법에이 GridSqure에있는 모든 거주자를 얻을 수있다. 이 메서드는 확장 된 점유자 클래스가있는 Occupant Array을 반환합니다 (E.G : Animal, A Tool 및 A Food).

Occupant[] allOccupants = newGridSquare.getOccupants(); 

    for (Occupant oneOccupant : allOccupants) 
     { 
     if(oneOccupant.getStringRepresentation() == "A") 
     { 

      player.reduceStamina(oneOccupant.getDanger()); 

     } 
    } 

컴파일러는 이미 점유자로 할당해서 동물 클래스에 getDanger 방법에 액세스 할 수 없습니다.

확장 된 점유자 클래스의 getDanger 메소드에 액세스하려면 어떻게합니까? 동물?

+1

관련 항목 : [Java에서 문자열을 어떻게 비교합니까?] (http://stackoverflow.com/questions/513832/how -do-i-compare-strings-in-java) –

+0

질문이 명확하지 않습니다. 'Animal' 만'getDanger' 메소드를 가지고 있고'Occupant'는 그렇지 않다고 말하는 겁니까? 수업 코드를 게시하십시오. – chrylis

+0

@SotiriosDelimanolis Thats 또 다른 문제 :) –

답변

1

당신은 "A" 가정 인스턴스

for (Occupant oneOccupant : allOccupants) 
{ 
    if("A".equals(oneOccupant.getStringRepresentation())) 
    { 
     Animal animal = (Animal) oneOccupant; 
     player.reduceStamina(animal.getDanger()); 
    } 
} 

전송할 수 있습니다 것은 Animal 예를 들어 식별자이며, 동물 Occupant의 하위 클래스이며 getDanger() 방법이있다. 그렇지 않으면, 먼저 검사에게

if (oneOccupant instanceof Animal) { 
    Animal animal = (Animal) oneOccupant; 
    player.reduceStamina(animal.getDanger()); 
} 

관련 작업을 수행합니다

0

getDanger는 점유자 클래스에서하지만 특정 클래스 동물에 존재하지 않기 때문에. 그래서 당신은 하나의 축에 동물 수업을 배제해야합니다.

다른 해결책은 Occupant 클래스에서 getDanger를 선언하고 확장 클래스로 구현하는 것입니다. Animal을 제외한 클래스의 경우 빈 구현을 제공 할 수 있습니다. 하지만 그것은 디자인 관점에서 좋은 접근 방법이 아니라 때로는 레거시 코드의 경우에 의존합니다.