2015-01-19 6 views
0

다른 클래스의 객체를 저장할 수있는 "인벤토리"라는 배열을 만들고 싶습니다. (무기, 병, 음식 등)하나의 배열에 다른 유형의 객체를 저장하여 객체 배열 만들기

나는 이것이 가능한 방법을 알고 싶습니다 ... arraylist는 한 종류의 배열 만 만들 수 있습니다 ... 나는 그것을 시도했습니다. 사전에

감사합니다.

+0

수업 (그들은 하나 개의 공통 클래스를 확장하는 경우 또는), 당신은 배열을 선언 할 수있다 하나의 공통 인터페이스를 구현하는 경우 이 공통 클래스/인터페이스의 그렇지 않으면 Object가 대답입니다. – ferjani

+0

모든 항목이 모든 항목에 고유 한 메소드를 정의하는 수퍼 클래스 (아마도'Item', 아마도)를 확장하도록합니다. 아이템의 각 타입이'Item'을 확장하기 때문에,'List ' 또는'Item []'을 사용하여 모든 아이템을 저장할 수 있습니다. –

+0

필요한 경우 Object []를 사용할 수 있습니다. 제 추천은 '아이템'이라고 불리는 1 개의 아이템 클래스를 만드는 것입니다. 그런 다음 다른 클래스를 확장 할 수 있습니다. 그런 다음'Item []'을 만드십시오. – CaffeineToCode

답변

3

개체가 Item과 같은 수퍼 클래스를 확장하고 Item[] 배열로 만듭니다.

0

일반적인 수퍼 클래스/인터페이스의 배열을 사용해야합니다.

가장 쉬운 방법은 Object (Object [])의 배열을 사용하는 것이지만, 문자 그대로 아무것도 추가 할 위험이 있습니다.

태그 인터페이스가되어야하는 경우라도 모든 개체가 구현할 인터페이스를 만드는 것이 가장 좋으므로 거기에 넣을 수있는 것보다 많은 종류의 개체를 제한해야합니다. 물론 이러한 객체의 일반적인 기능 (예 : "가중치"또는 "drawObject"와 같은 속성)이있는 경우 인터페이스는 실제로 태그를 넘어서는 의미를 갖습니다.

+0

감사합니다. 마술처럼 작동합니다 ... –

0

모든 클래스의 항목을 동일하게 구현 했습니까? 인터페이스, "항목". 그런 다음 arrylist를 Item으로 만드십시오.

또는 항목에 공통 데이터 (예 : 가격)가있는 경우 모두 동일한 클래스를 확장 할 수 있습니다.

같은 추상 클래스를 확장

예 :

public abstract class Item { 
    private int value; 

    public int getValue() { 
     return value; 
    } 

    public void setValue(int value) { 
     this.value = value; 
    } 
} 

public class Weapon extends Item { 
    private int damage; 

    public Weapon(int value, int damage) { 
     this.setValue(value); 
     this.damage = damage; 
    } 
} 

ArrayList 선언 :

List<Item> inventory = new ArrayList<Item>(); 
inventory.add(new Weapon(10, 25)); 
관련 문제