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です。これは、アクセサー メソッドを使用する必要があることを意味します。
これが役立つことを願っています。