【Java初歩】メソッドとフィールド、クラス、コンストラクタについて

Java初心者用の学習めもです。
メソッドやフィールド、クラスの違いやコンストラクタとは？について記録しています。

#メソッド
・メソッドは、繰り返し使える処理のかたまり（関数）のこと
・メソッド名の後（）内に引数を指定できる

```java

[修飾子] [戻り値のデータ型] メソッド名(引数){
	（メソッドの処理内容）
}
```
・値を返す場合は「return」を使う

```MyTest.java
//クラス
public class MyTest{      
//sayHelloメソッド
    public static String sayHello(String name){
        return "Hello" + name;
    }
//mainメソッド    
    public static void main(String[] args){
        String msg = sayHello("Bob");
        System.out.println(msg);
    }  
}
```
#メソッドのオーバーロード
・オーバーロードとは、同クラスの中で同じメソッド名で、引数の型や数や並び順が違うメソッドを2つ以上定義すること

```MyTest.java
public class MyTest {
  public static void sayHello(String name) {
    System.out.println("Hello" + name);
  }

  // オーバーロード
  public static void sayHello() {
    System.out.println("Hello!everyone!");
  }

  public static void main(String[] args) {
    sayHello();//引数なし
    sayHello("Bob"); //String型の引数を指定
  }

}
```

#フィールド
・フィールドとは、クラスの内部に定義した変数のこと
・フィールドの変数は、各メソッド内で利用することができる

```java
[修飾子] データ型 フィールド変数名; //フィールドの書き方
```

#クラス
・クラスとは、プログラムを実行するための処理をまとめたオブジェクトのこと
・クラスにはメソッドとフィールドを定義する
・class の後にクラス名を定義する（最初は必ず大文字）
・クラスは参照型のため、メモリ領域にデータを確保するためには「new」する必要がある
・newすることを「インスタンス化」と呼ぶ

```MyTest.java
//User型クラス
class User {

  String name = "Me!"; // フィールド初期化
  void sayHello() {
    System.out.println("hello");
  }
}

public class MyTest {

  public static void main(String[] args) {
    User tom;//User型のtomを宣言
    tom = new User(); // インスタンス化
    System.out.println(tom.name);
    tom.sayHello();
  }

}
```
#コンストラクタ
・コンストラクタは、インスタンス化の際に自動で実行されるメソッド（処理）のこと
・コンストラクタ名はクラス名と同じ名前で以下のように書く
・（）内に引数を指定できる

```java
public クラス名(){
        処理内容;
    }
```

・コンストラクタでインスタンスのフィールドにアクセスするには「this」と書く
・「this」は　このインスタンス　という意味
・コンストラクタはメソッドのため、オーバーロードもできる

```MyTest.java
class User {
  String name;
  // コンストラクタ
  User(String name) {
    this.name = name;
  }

  // コンストラクタ
  User() {
    // this.name = "Me!";
    this("Me!");
  }
  //メソッド
  void sayHello() {
    System.out.println("hello! " + this.name);
  }
}

public class MyTest {

public static void main(String[] args) {
        User tom;
        //クラスのnameフィールドをtomに指定
        tom = new User("tom");
        System.out.println(tom.name);

        //hello!Me!
        tom = new User();
        tom.sayHello();
  }

}
```

#クラスの継承
・クラスの継承とは、既にあるクラスの共通する機能を引き継ぐこと
・継承元をスーパークラス（親クラス）、継承先をサブクラス（子クラス）とよぶ
・以下のように書く

```java

class サブクラス名 extends スーパークラス名 {}
```
・親クラスのコンストラクタは「super()」で指定できる
・親クラスのメソッドを上書きすることを「オーバーライド」という

```MyTest.java
class User {
    String name;
    
    User(String name) {
        this.name = name;
    }

    void sayHello() {
        System.out.println("hello! " + this.name);
    }
}

//クラスの継承
class PopUser extends User {

    PopUser(String name) {
        super(name);//親クラスコンストラクタの引数を指定
    }

    void sayThanks() {
        System.out.println("Thanks! " + this.name);
    }

    // オーバーライド
    @Override//オーバーライドを明示できる
    void sayHello() {
        System.out.println("[pop] hello! " + this.name);
    }
}

public class MyTest {

    public static void main(String[] args) {
        User tom = new User("tom");//1行でインスタンス化できる
        System.out.println(tom.name);
        tom.sayHello();

        PopUser bob = new PopUser("bob");
        System.out.println(bob.name);
        bob.sayHello();
    }

}
```

ここまで。