2012-02-09 4 views
0

빠른 질문입니다.하지만 인터넷 검색에서 확실한 답을 얻는 데 문제가 있습니다.개인용 오브젝트는 java에서 어떻게 전달됩니까?

그래서 3 개의 개체가 있습니다. 카드, 데크, 플레이어. 데크와 플레이어 모두 카드 배열을 가지고 있고 두 가지 모두 메인에 선언되어 있습니다.

메인()에서 다음을 수행하여 카드를 덱에서 플레이어로 가져올 수 있습니까?

player.getcard(deck.draw()) 

deck.draw()는 카드를 반환하고 getcard은 다음과 같습니다 player.getcard(Card card)

그리고 그래, 나는 C++에서오고있다.

+1

네, 그렇게 할 수 있습니다. 너 해봤 어? 할 수 없다면 그 방법의 정의를 보는 것이 도움이 될 것입니다. – ggreiner

+0

네, 물론 할 수 있습니다. –

+0

예 ................ – Nishant

답변

1

대답 : 예, getcard이 실제로 해당 매개 변수를 Player 클래스의 일부 개인 필드에 넣었다고 가정합니다.

답변 : Java에서는 원시와 참조라는 두 가지만 사용할 수 있습니다. 프리미티브는 숫자 유형, 문자 및 부울입니다. 다른 모든 것은 객체이고 모든 객체는 참조입니다. 그래서, 당신은

Foo f = new Foo(); 

를 작성할 때 유형 Foo의 새로운 객체가 생성되고 (가비지 수집) 힙, 그리고 당신은 또한으로 생각할 수있는 참조의 "포인터"를에 배치됩니다 스택. 자바 언어는 그 참조를 조사 할 수있는 실제적인 방법을 거의 제공하지 않는다. (예를 들어 포인터 나 long에 캐스트 할 수는 없다.) 그래서 불투명 한 핸들이라고 생각할 수있다.

그래서, 당신은 쓸 때

player.getcard(deck.draw()) 

전화

deck.draw() 

유형 Card의 객체에 대한 참조를 반환하고, 그 객체는 player.getcard 메서드에 전달된다. Player 클래스는 나중에 다음

public class Player { 
    private List<Card> cards; 
    // ... 
    public void getcard(Card card) { 
     cards.add(card); 
    } 
} 

같이 보입니다 경우, deck.draw()의 반환 값이 cards에 추가 된 것을 볼 것이다 cards 개인 필드에 액세스 Player의 방법으로 호출합니다.

1

예, Deck 클래스의 "draw"메소드가 표시되는 것으로 가정합니다 (패키지가 private이고 패키지의 main 메소드와 동일한 패키지 또는 공용 메소드). 데 귀하의 방법이 더 좋은 이름을 가질 수 있다고 말했다 :

player.drawCard(Card aCard) 

당신이 플레이어에서 카드를 얻고있는 것처럼 보일 수 있습니다 "getcard"보다 더 좋을 것입니다.

+0

나는 예제를 만들었지 만 그래, getter는 게터를 위해 예약되어야한다고 생각한다. – slicedtoad

1

엄밀히 말하자면, getcard()의 반환 유형이 Card이면 그렇습니다. Player 개체에 제대로 포함 되려면 아래와 같이보아야합니다. 이 예제에서는 Deck 클래스의 getCard() 메서드가 static으로 선언되어 있다고 가정합니다. 즉, 카드를 가져올 인스턴스를 만들지 않아도된다는 의미입니다.

public class Player { 

    private Card[] hand; 

    public Player(int handSize) { 
     hand = new Card[handSize]; 
    } 


    ... 

    public void getCard(int pos) { 
     // Some logic to handle behavior with 0 cards, handSize cards, etc... 
     hand[pos] = Deck.getCard(); 
    } 
} 
관련 문제