2012-02-09 7 views
0

簡単な質問私は想像していますが、私はグーグルから明確な答えを得ることができません。プライベートオブジェクトはどのようにjavaで渡されますか?

私は3つのオブジェクトを持っています。カード、デッキ、プレーヤー。 デッキとプレーヤーの両方にカードの配列があり、両方がメインで宣言されています。

デッキからプレーヤーへのカードへの参照を取得するには、main()で次のことを行うことができますか?

player.getcard(deck.draw()) 

deck.drawは()カードを返し、getcardは次のとおりです。player.getcard(Card card)

そして、はい、私はC++から来ています。

+1

はい、できます。あなたはそれを試しましたか?あなたができないなら、それらのメソッドの定義を見るのを助けるでしょう。 – ggreiner

+0

はい、確かにこれを行うことができます。 –

+0

はい................ – Nishant

答えて

1

短い答え:はい、getcardは実際にはPlayerクラスのいくつかのプライベートフィールドにそのパラメータを置きます。

答え:Javaでは、プリミティブと参照の2つしかありません。プリミティブは数値型、文字、ブール値です。他のすべてはオブジェクトであり、すべてのオブジェクトは参照です。だから、あなたは

Foo f = new Foo(); 

を書くときタイプFooの新しいオブジェクトが作成され、(ガベージコレクション)ヒープ、あなたはまた、として考えることができます参照、上の「ポインタ」に置かれていますスタック。 Java言語では、その参照を調べる実際の方法はほとんどありません(たとえば、ポインタまたは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); 
    } 
} 

のようなものに見える場合すると、その後、cardsプライベートフィールドにアクセスPlayer内のメソッドへの以降の呼び出しはdeck.draw()の戻り値がcardsに追加されていることがわかります。

1

はい、Deckクラスの "draw"メソッドが表示されているとします(パッケージはプライベートで、メインのメソッドを持つクラスと同じパッケージにあります)。あなたの方法は、より良い名前かもしれない、と述べた:

player.drawCard(Card aCard) 

することで、プレイヤーからカードを取得しているように、それは思われてしまう「getcard」よりもよりよいだろう。

+0

私は例を作りましたが、ええ、ゲッターのために "get"を予約するべきだと思います。 – 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(); 
    } 
} 
関連する問題