java.awt.* をインポートしても java.awt.geom.* がインポートされないのはなぜですか? java.awt.geom 内のすべてが java.awt 内にあるのではありませんか? パッケージの名前から判断すると、そう思います。
パッケージの名前は誤解を招くものです。java.awt
や などの名前が付けられていますjava.awt.geom
が、実際にはまったく別のパッケージです。Java には、実際には「パッケージ階層」はありません。
import java.awt.*;
パッケージ内のすべてのクラスをインポートします。はクラスが異なる別のパッケージであるjava.awt
ため、そのパッケージもインポートする必要があります。java.awt.geom
階層名は主に組織用です!
インスタンス変数に直接アクセスするのはまずいので、代わりにアクセサ メソッドを使用する必要があります。何故ですか?コンベンションだけですか?
カプセル化について Sotirios Delimanolis が言ったことは良かったのですが、オブジェクト指向プログラミングでは、ユーザー (またはパッケージを使用するプログラマー) がクラスのカプセル化で何をできるかをプログラマーが決定する責任があるというのが一番の説明だと思います。メンバー変数。
そのため、メンバー変数を作成するのが慣例ですprivate
。オブジェクトに格納されたデータはオブジェクトの責任であり、定義したメソッドを介してそのオブジェクトとのインターフェイスが適切に機能することを確認するのは、プログラマとしてのあなたの仕事です。したがって、誰かがオブジェクトのデータを直接変更できるようにしたい場合は、そのためのメソッドset
を作成できます。
次のようなことを考えてみましょう:
Pizza myPizza = new Pizza(18) //18-inch pizza. Yum!
これを行うと、ピザはnumSlices
(現在はカットされていないため 1) やpizzaLeft
((18/2)^2 * pi インチ) などの他の変数メンバーを計算します。どちらがより理にかなっていますか?
myPizza.pizzaLeft -= 50; //50 inches of pizza eaten
myPizza.pizzaLeft; //returns about 204.47
また
myPizza.slice(8); // cut into 8 pieces which are about 32 square inches each
myPizza.eat(1); // eat one slice
myPizza.getPizzaLeft(); //returns about 222.47
ピザを扱っているので、スライスしてスライスして食べる方が理にかなっています. pizzaLeft
ピザ オブジェクト自体は、 やなどの変更を計算する責任がありslicesLeft
、クラスとやり取りするオブジェクトはそれを認識しません。
これは、メンバー変数が慣習的に に設定されているためprivate
です。これは、アクセサー メソッドを使用する必要があることを意味します。
これが役立つことを願っています。