Javaについて(No2) 初級
前回はオブジェクト指向について述べたので、今回はもっと具体的にJavaプログラミングの基本を述べます。前回の例で Robot robot=new Robot("ロボ1号",10,10);というコードを挙げました。()の中には、3つの引数があります。それぞれ、名前、X座標、Y座標ということにします。Robotクラスのクラス宣言においては、次のように宣言されているとします。 public class Robot { private String name; private int x,y; public Robot() { // ←1 this("ジム",50,50); } public Robot(String name,int x,int y){ // ←2 this.name=name; this.x=x; this.y=y; } //パラメータ表示 public void Disp(){ System.out.println("ロボット名:"+name+"\t位置:"+x+","+y); } public static void main(String[] args) { Robot robot1=new Robot(); Robot robot2=new Robot("ガンダム",100,100); robot1.Disp(); //ロボット1のパラメータ表示 robot2.Disp(); //ロボット2のパラメータ表示 }} 上のコードについて説明します。 まず、Robotクラスについて説明します。 コード中に出てくるprivateやpublicはアクセス制御をしています。privateはクラス内のみで使用するフィールドやメソッドを指定します。publicはクラス外部からアクセスしたいフィールドやメソッドを指定します。 オブジェクト指向において、クラス内のフィールドは全てのフィールドはprivateを指定すべきと書かれている本もあります。フィールドをprivateで指定すると、クラス外部からアクセス不可になるため、フィールドは保護されます。これをカプセル化と言います。フィールドを変更したい時はアクセスメソッドを用意して、メソッドを介してフィールドを変更します。 1の行と2の行を見てください。 public Robot() { // ←1 this("ジム",50,50); } public Robot(String name,int x,int y){ // ←2 this.name=name; this.x=x; this.y=y; } まず、1と2はコンストラクタを呼ばれるもので、C++にも出てきます(但し、デストラクタはJavaには無い)。コンストラクタはクラス名と名前は同じで、戻り値は指定しません。また、コンストラクタは複数宣言することができます。複数コントラクタを宣言することをコンストラクタのオーバーロードと言います。この例では、1のコンストラクタでは引数に何も指定してません。2のコンストラクタでは3つの引数を指定しています。1が呼ばれたら、 this("ジム",50,50);で、2のコンストラクタをthis()で呼び出しています。Dispというメソッドはコンソールにフィールド値を表示します。 次に実際にRobotクラスを使ってみましょう。 Javaアプリケーションは基本的にmainメソッド(C言語でいう関数)から始まります。mainメソッドの内部では、Robotクラスからオブジェクトの実体(インスタンス)を2個生成しています。一つ目(robot1)は引数なしでオブジェクトをnew演算子で作成しています。2つ目(robot2)は3つの引数を指定してオブジェクトを生成しています。 その後、Dispメソッドで各オブジェクトのフィールド(変数)をコンソールに表示しています。結果:ロボット名:ジム 位置:50,50ロボット名:ガンダム 位置:100,100となります。ここで、大切なのは robot1.Disp(); //ロボット1のパラメータ表示 robot2.Disp(); //ロボット2のパラメータ表示で、同じメソッドを呼び出しているように見えますが、実際には違うオブジェクトを介しているので、それぞれ違った処理結果となります。今日は一応ここまでにしておきます。お疲れ様でした。m(__)m