2013-02-04 4 views
-1

가능한 한 간단하고 체계적으로 코딩하려고 노력하는 데 문제가 있습니다. 기본적으로 여러 값을 보유하는 유사한 객체 배열이 있습니다. 그 개별적인 가치에 접근하고 의지대로 수정할 수는 있지만 접근 할 수없는 것처럼 보입니다. 이것은 많은 변수와 이것 저것이 있습니다Java에서 유사한 객체 배열에 저장된 객체의 개별 값에 액세스하는 방법

//In file Champion.java 
    package Champions; 
    public interface Champion{} 

    //In another file ChoGath.java 
    package Champions; 
    public class ChoGath implements Champion{ 
    public static double health = 440.0; 
    } 

    //Yet another file Ahri.java 
    package Champions; 
    public class Ahri implements Champion{ 
    public static double health = 380.0; 
    } 

    //In the main build file LOLChampBuilder.java 
    package LOLChampBuilder; 
    import Champions.*; 
    public class LOLChampBuilder{ 
     public static Champion[] listOfChampions = {new ChoGath(), new Ahri()}; 
     public static void main(String args[]){ 
      //This next line works 
      System.out.println(new ChoGath().health); 
      //This next line does not work 
      System.out.println(listOfChampions[0].health); 
     } 
    } 

... 코드가 기본적으로 같은 모습입니다 그러나 이것은 기본적인 문제입니다.

ChoGath와 Ahri는 챔피언 그룹의 일원이며 각각 건강을위한 고유 한 가치가 있습니다. ChoGath (예를 들어)가 배열에있는 곳을 알고 있기 때문에 배열을 조합하여 값을 쉽게 얻을 수 있기를 원합니다.

나는 Cannot find symbol 'health' in Champions.Champion 오류가 발생합니다. 나가서 챔피언에 값을 만들었습니다. 그리고 그것을 고친다. (또한 그것을 클래스로 변경하고 구현 대신에 확장한다.) 그런 다음 프린트 할 때 값이 건강에 가장 최근에 편집되었으므로 값은 항상 380.0이다. 챔피언.

하나의 배열로 모든 "챔피언"을 그룹화 할 수 있기를 바래요. (즉, 챔피언 이 틀리다면과 같은 객체 유형이어야합니다.) 값. 나는 ArrayList (내가 사용한 적이없는) 또는 완전히 다른 것을 사용할 필요가 있는지 모르겠다. 이제이 문제를 해결하고 방대한 파일에 모두 넣을 수 있지만 정리 목적과 청결을 위해 여러 파일을 사용하려고합니다. 할 일에 대한 생각? 당신은 인터페이스에서 getter와 setter를 사용할 필요가

+0

모두 감사 의견에 대한 ChoGath 및 Ahri 클래스에서이 메소드를 구현합니다. 문제는 빠르고 간단하게 해결되었습니다. 사람들이주는 건설적인 피드백에 깊은 인상을받으며이 사이트에 기여하고 더 많은 것을 배우기를 바랍니다. – ShadowOfCaboose

답변

3

당신은 당신의 인터페이스에 getHealth()를 추가해야합니다. 그것이 게터가 원하는 것입니다.

또한 static 변수를 사용하지 마십시오. 그들은 프로그래밍 오류를 생성하는 경향이 있습니다.

+1

인터페이스에 공개 필드가있을 수 있습니다. 그냥 시도해보십시오;) – Marc

+0

감사합니다. 감사합니다! 나는 그것이 그렇게 간단하게 작용했다고 믿을 수 없다. 비슷한 것을 시도한 것을 기억하는 것 같고 작동하지 않습니다 (내가 한 일을 모르는 것). 이 사이트에서이 답변을 찾으려고 1 시간 동안 검색했습니다. 나는 그 순간들 중 하나를 가지고있는 것 같아요. 그러나 이것들이 어떤 사이트인지에 대한 것입니다. 나는 인터페이스에 관해서 지식이 부족하다는 것을 용서한다. 오, 그리고 그 정적 변수를 제거 해줘서 고마워.그들은 저를 괴롭 히고 왜 내가 그들을 사용하고 있는지 알지 못합니다. – ShadowOfCaboose

1

는 예컨대,이 기능을 얻을, 또는 Champion위한 인터페이스 대신 기본 클래스를 사용하는 방법 :

interface Champion 
{ 
    public int getHealth(); 
    public void setHealth(int health); 
} 
1

인터페이스에 변수가 health이어야합니다. 이는 Subclass 및 Superclass의 개념과 유사합니다. 모든 수퍼 클래스가 하위 클래스가 아니기 때문에 (수있는 경우 true) 수퍼 클래스 유형을 사용하여 하위 클래스의 변수에 액세스 할 수 없습니다. 수퍼 클래스에 정의 된 경우에만 액세스 할 수 있습니다. 당신이 인터페이스에서 건강 변수를 사용한다면 그것은 최종 정적이어야합니다. 따라서 인터페이스에서 setter 및 getter 메서드를 사용하여 값을 얻는 것이 좋습니다.

인터페이스 챔피언 {public int getHealth(); }

지금

관련 문제