4章 クラスの基礎
1.クラスとは
 クラスとは、プログラムをある実世界のモノとして考え、それに必要なデータと働き(メソッド)をひとまとめにしたものである。
 クラスは、「System」クラスと「String」クラスがある。Systemクラスはディスプレイに文字を表示させるための標準出力、標準エラー出力に表示させるために用いてきた。「String」クラスは、文字列を担うクラスである。そのでーた(クラス変数)として文字列そのものを持ち、メソッドとして検索したり、つなげたり、部分文字列を抽出したりといったメソッドが定義されている。
 このように、データとそれらを扱うメソッドを作成したクラスは、そのクラスの内部がどのようになっているのか知らなくても、部品のように使用することができる。つまり、SystemクラスやStringクラスの中身を知らなくても(ソースコードを見なくても)、そのクラスを使って、プログラムを作ることができる。さらに、その部品(クラス)は他のプログラムを作成するときにも使いまわしができる。
 
2.クラスの作成
 ここでは、Mypoingクラスを作ってみる。Mypointクラスは座標を担うクラスで、メンバー変数として、X座標とY座標を持つ。メソッドとしては、2点間の座標を求めるメソッドと、ディスプレイに表示するためにString型に変換するメソッドを持つ。
 クラスを作成する場合、基本的に1ファイルに1クラスでファイル名はクラス名と同じにする必要がある。
MyPoint.java

class MyPoint{
    double m_x;
    double m_y;

    // 文字列に変換する
    public String toString(){
         return "X:"+m_x+"  Y:"+m_y;
    }

    // 距離を計算する
    public double calcDistance(MyPoint pnt){
          // Mathクラスは数学関係を担うクラス
          // Math.pow累乗を計算するメソッド
          // Math.sqrtはルートを計算するメソッド
     return Math.sqrt(Math.pow((m_x – pnt.m_x), 2) + Math.pow((m_y – pnt.m_y), 2));
    }
}

 

Test.java

import  java.io.*;
   
class  Test{
    public static void main(String args[ ] ){
         int n;
         MyPoint pnt1 = new MyPoint( );                 // (1)
         MyPoint pnt2 = new MyPoint( );                 // (1)

         pnt1.m_x = 10;
         pnt1.m_y = 20;

         pnt2.m_x = 50;
         pnt2.m_y = -20;

    System.out.println("pnt1 " + pnt1.toString( ));
    System.out.println("pnt1 " + pnt1.toString( ));
    System.out.println("距離:" + pnt1.calcDistance(pnt2));
    }
}
 

C:\java>javac Test.java

C:\java>javac Test
pnt1 X:10.0   Y:20.0
pnt2 X:50.0   Y:-20.0

距離:56.568542494923804

C:\java>

 クラスを定義した(MyPoint.javaを作成しただけ)では、クラスを使えるようにはならない。
Test.javaのように「new」をしてはじめてクラスを使えるようになる。このnewをインスタンスを作るまたはオブジェクトを作ると言う。
newを何個も行うことで、インスタンスをたくさん作ることができる。これらのインスタンスは別のものであるが、変数の値もインスタンスが異なれば違う値を保持する。この場合、pnt1のメンバー変数のm_xとpnt2のm_xは違う値を保持している。それはこのためである。
 
      __pnt1__    __pnt2__   
    |_____m_x = 10  |    |   m_x = 50   |
       |     m_y = 20  |    |   m_y = -20 |
        ↑          ↑

        |          |
        |          |

両者は違うメモリーに格納される。このため、別のものとなる。

 
3.コンストラクタ
 クラスには、インスタンスが作られた時に一度だけ実行される「コンストラクタ」というものがある。一般にコンストラクタにはそのクラスインスタンスを初期化するために使用される。
MyPoint.java

class  MyPoint{
    double m_x;
    double m_y;

    // コンストラクタ
    public Mypoint( ){
         System.out.println("コンストラクタ1が呼ばれました");
         m_x = 10;
         m_y = 20;
   }

    // コンストラクタ2
    public Mypoint(double x, double y ){
         System.out.println("コンストラクタ2が呼ばれました");
         m_x = x;
         m_y = y;
   }
 
    // 文字列に変換する
    public double clacDistance(MyPoint pnt ){
       // Matchクラスは数字関係を担うクラス
       // Match.pow累乗を計算するメソッド
       // Match.sqrtはルートを計算するメソッド
       return Math.sqrt(Math.pow((m_x – pnt.m_x),2) + Math.pow((m_y – pnt.m_y), 2));
   }
}
 

Test.java

import  java.io.*;

    public static void main(String args[ ] ) {
    int n;
         MyPoint pnt1 = new MyPoint();
         MyPoint pnt2 = new MyPoint(50, -20);

//     pnt1.m_x = 10;
//     pnt1.m_y = 20;

//     pnt2.m_x = 50;
//     pnt2.m_y = -20;

         System.out.println("pnt1 " + pnt1.toString());
         System.out.println("pnt2 " + pnt2.toString());
         System.out.println("距離:" + pnt1.calcDistance(pnt2));
   }
}
 

C:\java>javac Test.java

C:\java>javac Test
コンストラクタ1が呼ばれました
コンストラクタ2が呼ばれました

pnt1 X:10.0   Y:20.0
pnt2 X:50.0   Y:-20.0
距離:56.5685424923804

C:\java>