【Java】クラス・メソッドの個人的まとめ（基礎）

# 【Java】クラス・メソッドの個人的まとめ（基礎）
個人的にJavaの勉強で大事だなと思ったことをまとめました。
今回は、クラス・インスタンス・メソッドについてです。

## ① クラスについて
- モノや事柄であるオブジェクトの1つであり、まだ実体化されていないもの（モノの設計図）。
- Javaのコードには、最低1つ以上のクラスが必要。
- クラスを1つの「モノ」として考えると、クラスの中身（メンバ）には大きく分けて以下の2つある。
    - モノの状態や性質を扱う「フィールド」
    - モノの機能を扱う「メソッド」
- クラスは、基本的に以下の「sample.java」ように記述する。

```sample.java
// クラスの宣言
class Animal
{
  // クラスのモノの状態・性質を扱う「フィールド」を記述
  // 「型名 フィールド名;」のように記述
  String name;
  int num;
  // クラスの機能を扱う「メソッド」を記述
  // 「戻りの型 メソッド名(引数リスト){文;}」のように記述
  void show() {
    System.out.println("動物の名前は" + name + "です。");
    System.out.println("登録番号は" + num + "です。");
  }
}
```
## ② インスタンスについて
- モノや事柄であるオブジェクトの1つであり、実体化されたもの（設計図から作られた実物）。
- 宣言したクラスを利用するために、インスタンスの作成が必要。
- インスタンスを作成するために、以下の手順を踏む。
    1. インスタンス変数を宣言する。
    2. インスタンスを作成し、その変数で扱えるようにする。
- インスタンス作成すると、クラスのメンバにアクセスできるようになる。

```sample.java
// クラスの宣言
class Animal
{
  String name;
  int num;

  void show() {
    System.out.println("動物の名前は" + name + "です。");
    System.out.println("登録番号は" + num + "です。");
  }
}
class Sample
{
  public static void main(String[] args)
  {
  // インスタンス変数を宣言。
  Animal animal1;
  // インスタンスを作成。
  // インスタンス作成で「実際に扱えるモノ」となる。
  animal1 = new Animal();
  // インスタンスの宣言と作成を以下のように同時に行える。
  // Animal animal1 = new Animal();
  
  // インスタンス名.フィールド名でフィールドにアクセスできる。
  animal1.name = "犬";
  animal1.num = "1";
  // インスタンス名.メソッド名でメソッドにアクセスできる。
  animal1.show();
  }
}

```

```text:console
動物の名前は犬です。
登録番号は1です。
```

## ③ メソッドについて
- メソッドは、モノの機能を扱う（処理をする）部分である。
- クラス外からメソッドを呼ぶときは、「インスタンス名.メソッド名」とする。
- クラス内でメソッドを呼ぶときは、「メソッド名」または「this.メソッド名」とする。

```sample.java
// クラスの宣言
class Animal {
  String name;
  int num;

  void show() {
    System.out.println("動物の名前は" + name + "です。");
    System.out.println("登録番号は" + num + "です。");
  }
  void showAnimal() {
    System.out.println("動物を紹介していきます。");
    // 自分自身のメソッドを呼び出している（クラス内から呼び出している）。
    // show()としても良い。
    this.show();
  }
}
class Sample {
  public static void main(String[] args) {
    Animal animal1;
    animal1 = new Animal();
  
    animal1.name = "犬";
    animal1.num = "1";
    // animal1の情報でメソッドを呼び出している（クラス外から呼び出している）。
    animal1.showAnimal();
  }
}

```
```text:console
動物を紹介していきます。
動物の名前は犬です。
登録番号は1です。
```
## ④ メソッドの引数と戻り値
- メソッドには、引数（値）を渡すことができる。
- 引数には、以下の2種類がある。

    (1) メソッドの定義内で値を受け取る変数 => 仮引数
    (2) メソッドを呼び出すときに渡す値 　　=> 実引数
- メソッドの呼び出し元に、メソッド本体から戻り値（情報）を渡すことができる。
- 戻り値のないメソッドでは、void型を利用する。
- 戻り値には、利用法が以下の2種類がある。

    (1) 呼び出し元で、戻り値利用する場合

    戻りの型 変数名 = オブジェクト名.メソッド名(引数リスト);

    (2) 呼び出し元で、戻り値利用しない場合

    オブジェクト名.メソッド名(引数リスト);

```sample.java
// クラスの宣言
class Animal {
  String name;
  int num;

  // String型およびint型の仮引数を用意。
  // 戻り値のないメソッド。
  void show(String str, int n) {
    // 引数の値をメソッド内で利用できるようにしておく。
    name = str;
    num = n;
    System.out.println("動物の名前は" + str + "です。");
    System.out.println("登録番号は" + n + "です。");
  }
  // 戻り値がString型のメソッド。
  String getAnimal() {
    System.out.println("動物を紹介していきます。");
    // 呼び出し元に、戻り値を渡す。
    return name;
  }
}
class Sample {
  public static void main(String[] args) {
    Animal animal1 = new Animal();
    String name = "トラ";
    // animal1の情報でメソッドに実引数を渡す（変数も利用可能）。
    // 呼び出し元で、戻り値を利用しないパターン。
    animal1.show(name, 2);
    // 呼び出し元で、戻り値を利用するパターン。
    int number = animal1.getAnimal();
    // 戻り値を利用する。
    System.out.println(name + "の登録番号は、" + number + "です。");
  }
}

```
```text:console
動物の名前はトラです。
登録番号は2です。
動物を紹介していきます。
トラの登録番号は、2です。
```
## ⑤ メンバへのアクセス制限
- メンバには、アクセス制限を設けることができる。
    - 「private」メンバには、クラス外からアクセスできない。
    - 「public」メンバには、クラス外からアクセスできる。

## ⑥ カプセル化
- クラスの中に、データ（フィールド）と機能（メソッド）をひとまとめにし、保護したいメンバには「private」を付けることで、アクセス制限を設ける機能のこと。

```sample.java
class クラス名 {
  // クラス外からアクセス不可能。
  private 型名 フィールド名;
  // クラス外からアクセス可能。
  public void メソッド名 {
    式;
  }
}
```
## ⑦ メソッドのオーバーロード
- 同じクラス内に、同じメソッド名で、異なる引数の型・個数を持つメソッドを定義すること。
- 戻り値の型の違いのみでオーバーロードしてしまうと、プログラムがどちらにアクセスすればよいか分からな くなってしまう。そのため、オーバーロードする際は、必ず「異なる引数の型・個数を持つ」ようにする。

```sample.java
class Animal {
  String name;
  int num;

  // 引数が1つのメソッド。
  void show(String str) {
    name = str;
    System.out.println("動物の名前は" + str + "です。");
  }
  // 引数が2つのメソッド。
  void show(String str, int n) {
    name = str;
    num = n;
    System.out.println("動物の名前は" + str + "です。");
    System.out.println("登録番号は" + n + "です。");
  }
}
class Sample {
  public static void main(String[] args) {
    Animal animal1 = new Animal();
    String name = "トラ";
    int num = 2;
    // 引数が1つのメソッドを呼び出す。
    animal1.show(name);
    // 引数が2つのメソッドを呼び出す。
    animal1.show(name, num);
  }
}

```
```text:console
動物の名前はトラです。
動物の名前はトラです。
登録番号は2です。
```
以上。