Java/文法/クラス

出典: フリー教科書『ウィキブックス(Wikibooks)』
< JavaJava/文法 クラス から転送)
ナビゲーションに移動 検索に移動

定義方法[編集]

例1:

// ファイル名: ClassSyntax.java
/**
* 商品を表す。
*/
class Product {
  /**
  * 値段
  */
  String name;
  
  /**
  * 価格
  */
  int price;
}

class ClassSyntax {
  public static void main(String[] args) {
      Product milk = new Product();
      milk.name = "牛乳";
      milk.price = 150;

      Product juice = new Product();
      juice.name = "ジュース";
      juice.price = 200;

      System.out.println(milk.name + "の値段は" + milk.price + "円");
      System.out.println(juice.name + "の値段は" + juice.price + "円");      
   }
}

実行結果[編集]

牛乳の値段は200円
ジュースの値段は150円

解説[編集]

4行目から14行目までがクラスProductの、16行目から31行目までがクラスClassSyntaxの定義である。Productでは、Productの実体 (インスタンスと呼ばれる) ごとに異なる値を持つことができる変数 (以下、インスタンス変数と呼ぶ) としてnamepriceが宣言されている。ClassSyntaxmain「メソッド」では、Productのインスタンスをnew演算子 (new演算子に到達したときに実行される処理群を「コンストラクタ」の中に記述することができる。コンストラクタについては後述) を用いて生成することができる。

インスタンス変数[編集]

class Product {
  /**
  * 値段
  */
  // インスタンス変数
  String name;
  
  /**
  * 価格
  */
  // インスタンス変数
  int price;
  
  // インスタンス変数ではない
  static int staticField;
}

メソッド[編集]

先述のコードで、17行目から30行目は、mainClassSyntaxのメソッドとして定義している。 クラスの中にしかメソッドを定義することができない。

引数[編集]

メソッドは引数を持つことができる。

例2:

class Product {
  /**
  * 値段
  */
  String name;
  
  /**
  * 価格
  */
  int price;

  /**
  * 標準出力に商品の内容を書き出す
  */
  void printDetails() {
    System.out.println(this.name + "の値段は" + this.price + "円");
  }
  
  /**
  * 価格を更新する
  * @param newPrice 新しい価格
  */
  void setPrice(int newPrice) {
    this.price = newPrice;
  }
}

コンストラクタ[編集]

コンストラクタをうまく用いると、クラスの初期化を簡略化することができる。

例3:

class Product {
  /**
  * 値段
  */
  String name;
  
  /**
  * 価格
  */
  int price;
  
  Product(String name, int price) {
    this.name = name;
    this.price = price;
  }
}

class ClassSyntax {
  public static void main(String[] args) {
      Product milk = new Product("牛乳", 150);
      Product juice = new Product("ジュース", 200);
      System.out.println(milk.name + "の値段は" + milk.price + "円");
      System.out.println(juice.name + "の値段は" + juice.price + "円");      
   }
}

メソッドと違う点は、名前がクラスの名前と同じでなければならないという制約がつくこと、戻り値の宣言をしてはならないことだ。