見出し画像

java訓練#14(クラス•インスタンス・コンストラクタ)

今日の授業

今日は新しく「クラス」について学びました。
これについて解説します。

クラス

1つのクラスだけで全部の処理を書くとごちゃごちゃして見づらくなります。なので実行させたい物が  関連している情報 ならそれだけを書く「  情報クラス  」と、その情報をもとに「  実行を行うクラス  」を作ります。
まず、「関連してる情報」とはどうゆう物かというと、例えばテストをして国語65点、数学70点、英語60点でした。
これは、科目と点数がありそれぞれ結びついてるという関連があります。
これらの情報を「情報クラス」に書きます。

情報を書くクラスの事を「インスタンスの設計図」ともいうそうです。

情報クラスだけだと「実行」できないので、実行クラスを作成します。
実行クラスでは情報クラスの物を使う為に「インスタンス」を作成しないといけません。

まず情報をコードで書くと以下のようになります。

public class Test {

  String name;
  int tensuu;
}

これで1つのファイル、情報クラスができました。
name は国語、数学、英語の教科名で使う変数です。
tensuu はそれぞれの点数で使う変数です。

フィールド

上記でかいた 「型 変数」の事をフィールドといいます。
これはそのクラスの「情報」を意味します。
上のコードでいうと、String name;  と  int tensuu; がフィールド(情報)です。

また、この情報クラスに書くメソッドの事を「機能」と言ったりもします。

インスタンス

情報クラスと実行クラスを繋げる為のコードを記事します。コードは以下のようになります。

クラス名  変数 = new クラス名();

この「 new クラス名 ();」の所をインスタンスといいます。インスタンス化する事で情報クラスと実行クラスを関連づけます。
クラス名は「 情報クラスの名前 」を書きます。なので上で書いた情報クラスの名前は Test になります。
そして、このコードは「実行クラス」に書きます。

実行クラス

次に実行クラスについて説明します。
情報クラスには mainメソッドはありませんでした。
しかし、実行クラスには mainメソッドを記述します。
コードは以下のようになります。

Public class shyori {
  public static void main(String[] args) {

    Test kokugo  = new Test();
    Kokugo.name = “国語”;
    Kokugo.tensuu = 65;
   
    Test sansuu = new Test();
    sansuu.name1 = “数学”;
    sansuu.tensuu1 = 70;

    Test eigo  = new Test();
    eigo.name2 = “英語”;
    eigo.tensuu2 = 60;
     
    System.out.println(kokugo.name + kokugo.tensuu);
    System.out.println(sansuu.name1 + sansuu.tensuu1);
    System.out.println(eigo.name2 + eigo.tensuu2);
  }
}

このコードを読み取って行くとTest kokugo = new Test();でインスタンスします。
変数(kokugo)は代入する物が分かる名前にしましょう。
インスタンスした物にkokugo.name = “国語”;
Kokugo.tensuu = 65; というようにフィールドに代入します。
そして、System.out.println(kokugo.name + kokugo.tensuu); で出力させます。
このプログラムの実行結果は以下のようになるはずです。

国語65
数字70
英語60

しかし、まだ情報クラスも実行クラスも色々コードが書いてあってしかも同じ様なコードです。
これを更にまとめて書くことができます。それは以下で説明します。更に練習問題も用意しました。
よかったら試してみて下さい。

公共職業訓練を受講する為に必要な事を下の記事で書いてます。
良かったらご覧下さい↓↓↓


ごちゃごちゃしてたコードを更に簡単にして見やすくする方法を説明します。

コンストラクタ

コンストラクタとはフィールドを初期化する為のものです。コンストラクタの動きとしてはインスタンスの引数を受け取り、それをフィールドに代入します。
コンストラクタは「情報のクラス」に書きます。コードは以下のようになります。

public class Test {
   String name;
   int tensuu;

 //コンストラクタ
 public Test(String name, int tensuu) {
     this.name = name;
     this.tensuu = tensuu;
 }

このコードに書いてある this というのは、フィールド の変数(name, tensuu)の事を指してます。
コンストラクタ名はクラス名と同じにしなければなりません

引数には「型 と 変数」が記述してあります。
カンマを記述する事によって引数を分けていて、このコンストラクタは引数を2つ持っています。
この引数の変数(name と tensuu)にインスタンスからの引数が代入されます。

インスタンスの引数には実引数という、「具体的な値」を記事します。
下記のコードでいうと、国語、65 などが実引数になります。
※コンストラクタで受け取る引数を「仮引数」といいます。実引数と仮引数の順番と個数を一緒にしなければなりません。

コードは以下のようになります。

Public class Exec {
  public static void main(String[] args) {

    Test kokugo   = new Test(“国語”, 65);
   
    Test suugaku  = new Test(“数学”, 70);

    Test eigo     = new Test(“英語”, 60);
     
    System.out.println(kokugo .name + kokugo.tensuu);
    System.out.println(suugaku.name + suugaku.tensuu);
    System.out.println(eigo .name + eigo .tensuu);
  }
}

情報クラスも実行クラスもかなりスッキリして見やすくなったと思います。

練習問題

クラスを2つ使って以下の問題を実行して下さい。

問題①
3つの教科の平均点を出力して下さい。インスタンスがいくつ作られても対応できるようにする事。
平均点の計算はメソッドを使うこと。

実行結果
国語65
数字70
英語60
3教科の平均点は65点です。

問題②
犬と猫の名前と年齢を出力して下さい。
表示はメソッドを使うこと。
※名前と年齢は好きに決めて下さい。

実行結果
犬の名前は○○で、年齢は○○です。
猫の名前は○○で、年齢は○○です。


解答

問題①
情報クラスに平均点を計算するメソッドを記述します。
引数と処理のないコンストラクタを記述します。

//情報クラス

//フィールド
String name;
int    tensuu;
static int sum;    //インスタンスの合計点
static int count;  //インスタンスが生成された個数

//コンストラクタ
Test() {}
Test(String name, int tensuu) {
  this.name   = name;
  this.tensuu = tensuu;
  sum += tensuu; 
  count++;
}

//平均点を計算するメソッド
int average() {
  int average = sum / count;
  return average;
}
//実行クラス

//インスタンスを作成します
Test kokugo   = new Test(“国語”, 65);
   
Test suugaku  = new Test(“数学”, 70);

Test eigo     = new Test(“英語”, 60);

Test ave      = new Test();

System.out.println(kokugo .name + “の点数 ” + kokugo.tensuu  + “点”);
System.out.println(suugaku.name + “の点数 ” + suugaku.tensuu + “点”);
System.out.println(eigo .name   + “の点数”  + eigo .tensuu   + “点”);
System.out.println(“3教科の平均点は” + ave.average + “点です。”);

問題②
問題①のプログラムを少し改造しましょう。
情報クラスのメソッドは呼び出されたら文字列を表示できるようにします。

//情報クラス

//フィールド
String name;
String type;
int    age;

//コンストラクタ
Test(String name, String type, int age) {
  this.name = name;
  this.type = type;
  this.age  = age;
}

//文章を表示するメソッド
void profile() {
 System.out.println(type + “の名前は” + “name” + 
                     “年齢は” + age + “才です”);
}
//実行クラス

//インスタンスを作成
Test cat = new Test(“猫”, “タマ”, 2);
Test dog = new Test(“犬”, “ポチ”, 5);

//メソッドを呼び出す
cat.profile();
dog.profile();

最後まで読んで頂きありがとうございました。
少しでも勉強になった、役に立ったと思ったら「 サポート」 で貴方のお気持ちを頂けると嬉しいです。
今後の励みにもなります。是非よろしくお願いします。

この記事が気に入ったらサポートをしてみませんか?