2013-12-12 3 views
0

나는이 기본 추상 클래스를위한 단일의 HashMap을 사용하여 HashMap<Integer, GameObject>...so I Can have access to theire shared members like 위치에 and resourceId`에있는 이러한 개체 모음이 있어야합니다.여러 상속 클래스

어떻게해야합니까? 그렇지 않다면 대안은 무엇입니까?

UPDATE

그것은 실제로 HashMapGameObject의 서브 클래스를 넣을 수 있습니다 밝혀졌다.

int id = 1; 
_hashMap.put(id++, new Home(ObjectType.HOME, id -1, resHome)); 

_hashMap.put(id++, new Normal(ObjectType.NORMAL, id -1, resNormal)); 

_hashMap.put(id++, new Snake(ObjectType.SNAKE, id -1, resSnakeOne, SnakeType.A)); 

하지만 지금 다시 항목을 얻고 싶은 경우에, 나는이 문제에 직면

Snake snake = _hashMap.get(3); 

컴파일러는 GameObject을 찾을 예정 불평하지만 Snake ... 여기에 문제가 뭐죠?

다른 클래스 (BaseAdapter에서 상속하는 클래스에 있음)의 해시 맵을 가지고 있으며 나중에이 객체에 모든 객체를 추가하여 나중에 getView에 드로어 블 객체의 위치와 리소스를 제공 할 수 있습니다.

CAST를 사용하면 다시 변환 할 수 있지만 전체 아이디어가 사라집니다. 해시 맵의 키를 사용하여 모든 게임 개체를 가리키고 싶습니다 .... 어떤 키가 기억 나는지 기억해야합니다. 어떤 종류의 객체 :

GameObject obj = _hashMap.get(3); 
Snake snake = (Snake) obj; 

snake.getSnakeType();

+1

자, 그럼 뭐가 문제입니까? –

+0

당신은'HashMap '을 사용하고 있습니다. 키로 값 객체를 찾을 수 있습니다. 제발 좀 더 구체적으로 말씀해 주시겠습니까? – Sage

+0

GameObject에'protected static HashMap '필드를 가질 수 있습니다. 단일 HashMap이 정확히 무엇을 의미합니까? –

답변

0

개인보다 가시성이 높은 공유 멤버를 노출해야합니다. 현재 _ 위치 및 _ 리소스 소스 필드를 볼 수 있습니다. 즉, 해당 필드는 GameObject 클래스 내에서만 볼 수 있습니다. GameObject 참조의 클라이언트는 말할 것도없고 GameObject 하위 클래스도 액세스 할 수 없습니다.

이상적으로, 부분 구현으로 인터페이스로 취급해야하는 수퍼 클래스에는 모든 GameObject 구현의 클라이언트에 표시 할 속성에 대한 접근 자 메서드가 있어야합니다. 당신이 당신의 프로그램에서 모든 클래스에 해당 속성을 노출하고자하는 경우 나는

public int getPosition(){ 
    return _position; 
} 

public int getResourceId(){ 
    return _resourceId; 
} 

Map 상속의 맥락에서 접근 수정에 대한 자세한 세부 사항에 대한 http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html를 참조하십시오 당신의 클라이언트를 포함하여 게임 오브젝트에 다음을 추가 건의 할 것입니다.

+0

답장을 보내 주셔서 감사합니다. 질문에 대한 제 업데이트를 확인해 주시겠습니까?> –

+1

그 업데이트는 원래 질문과 아무 관련이 없습니다 ... 뱀 관련 참조로 작업하려면 HashMap을 가 아닙니다. 그렇지 않으면, 여러분의 경우에 도움이되는 것은 구현체가 아니라 인터페이스로 프로그램하는 법을 배우는 것입니다. 여러분이 GameObject 클래스로하고 싶은 것을 수집합니다. 다형성 연구 (http://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html). – whaley