Javaでのインスタンスフィールド宣言

私はちょうどOOPのハングアップを取得していて、Javaでたくさん遊んでいます。私が抱える問題の1つは、特定のクラスのプライベートインスタンスフィールドが必要かどうかを判断することです。私が何かプライベートなインスタンスフィールドを作る必要があるかどうかに関して、私が使用すべきである経験則がありますか?

ありがとう。

0

4 答え

オブジェクトのインスタンスの状態の論理的な部分であるかどうかを確かめてください。それは、オブジェクトの全生涯にわたって有効なオブジェクトに関するものか、または単一のメソッドの過程でのみ適用されるものです(この場合、ローカル変数でなければなりません)?それとも、クラス自体に実際に適用できますか(その場合は静的でなければなりません)?

あなたがあまりよく分からない例を挙げることができれば、それは助けになるでしょう。

(ここでの選択は、静的変数、インスタンス変数、ローカル変数のいずれかであると仮定していることに注意してください)。インスタンス変数は、常にプライベートにする必要があります。

1
追加された

それがオブジェクトの自然な部分、または何かオブジェクトが定期的に何らかのタスクを実行する必要がある場合は、忘れずにそれを属性にします。定数の場合は、それをパブリッククラス変数(または定数:P)にする必要があります。つまり、 "public static final w/e"と宣言します。

パブリックインスタンス変数は、しばしばよりコードが煩雑になるため頻繁には使用されません。オブジェクトの状態としてインスタンス変数(または属性)について前述したように考えてください。周囲の人々をじゃまにするのではなく、操作を実行することによってオブジェクトの状態を変更することは、通常はより明確です。がんばろう。

1
追加された

"Avoid public fields except for constants. (Many of the examples in the tutorial use public fields. This may help to illustrate some points concisely, but is not recommended for production code.) Public fields tend to link you to a particular implementation and limit your flexibility in changing your code." Controlling Access to Members of a Class

0
追加された

オブジェクト指向プログラミングを学ぶときは、実世界の概念をコードとしてモデル化する方法と考えてください。名詞はオブジェクトになる。名詞に、または名詞上で、または名詞によって行われたアクションは、メソッドになります。インスタンス変数は、これらの名詞のプロパティです。例えば、 Car を表すクラスがある場合、 SlamOnTheBreaks()は、 Driver がブレークでスラムに呼び出すメソッドです。 Car には内部にいくつかの座席数があります。インスタンス変数は int numberOfSeats; です。

インスタンス変数は、知りたい、必要に応じて変更する必要があると考えてください。 numberOfSeats を公開することで、 Driver は車内の座席数を変更できますが、意味をなさないでしょう。彼らは車に何席あるかを知る必要があります。彼らは車に乗ったときに見つけることができ、 public int getNumberOfSeats()メソッドを呼び出すだけです。

ダニーが言及したように、物語は定数に関して異なっている。値が定数の場合、プログラムの実行中は一定のままです。たとえば、ドライバBob をすべてのドライバのドライバにしたい場合などです。 Bob のオブジェクトは Car オブジェクトと Truck オブジェクトであり、 ( Car Truck の間に継承がないと仮定して)、b)変更できません。

0
追加された