0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【メソッドとカプセル化の操作②】オーバーロード、コンストラクタ

Last updated at Posted at 2024-06-02

はじめに

オラクル認定資格教科書 Javaプログラマ Silver SE8
第一章 Javaの基本 
第二章 Javaのデータ型の操作
第三章 演算子と判定構造の使用
第四章 配列の作成と使用
第五章 ループ構造の使用
第六章 メソッドとカプセル化の操作← イマココ!!
第七章 継承の操作
第八章 例外の処理
第九章 Java APIの主要なクラスの操作

オーバーロード

 オーバーロードは、同名のメソッドを複数宣言できる機能。ただし、名前が同じでも引数が異なることが条件。
 引数が異なるとは、引数の数や型、順番が異なること
 数、型、順番が同じで、引数の名前だけが異なる場合やアクセス修飾子が異なる場合は、引数が異なるとはみなされない。(コンパイルエラー)

public class Sample {
  public void hello(){
    // do something
  }
  public void hello(int a){
    // do something
  }
  void hello(int a, String a){
    // do something
  }
}
--------------------------------
public static void main(String[] args) {
  Sample s = new Sample();
  s.hello(6);
  // 引数が同じのpublic void hello(int a)だけが呼ばれる
}

コンストラクタ

 コンストラクタは、生成されたインスタンスがほかのインスタンスから使われる前に、
事前準備を整える「前準備」をするためのメソッドの一種である。
 コンストラクタは自由に定義ができ、また、オーバーロードして複数定義することも可能。
 また、コンストラクタはクラスに必須であるが、省略も可能である。定義しなかった場合は、コンパイラが自動で「デフォルトコンストラクタ」を追加する。

コンストラクタのルール
・メソッド名をクラス名と同じにする
・戻り値は記述できない
・newと一緒にしか使えない(インスタンス生成時にのみ実行される)

public class Sample {
  [アクセス修飾子] クラス名(引数) {
	// do something
  }
}
//voidや戻り値型を記述した場合、コンストラクタではなく、通常のメソッドとみなされる

コンストラクタのアクセス修飾子でインスタンス化を制御

 コンストラクタの修飾子でインスタンス生成を制御できる。
 例)修飾子なしの場合、同じパッケージの属するクラスでしか、インスタンスを生成できない。

修飾子 説明
public すべてのクラスからアクセス可能
protected 同じパッケージか継承しているサブクラスからのみアクセス可能
なし 同じパッケージからのみアクセス可能
private クラス内からのみアクセス可能

コンストラクタのオーバーロード

 コンストラクタはメソッドの一種であるため、オーバーロードして複数定義することも可能。

public class Sample {
  public Sample() {
    // do something
  }
  public Sample(String str, int num) {
    // do something
  }
}

 コンストラクタから別のオーバーロードされたコンストラクタを呼ぶ際は「this」を使用する。
 また、ほかのコンストラクタを呼ぶ場合は、処理よりも前、一番最初に記述しなければいけない。

public class Sample {
  public Sample() {
    this("A"); // 必ず一番最初に記述する
    System.out.println("B");
  }
  public Sample(String str) {
    System.out.println(str);
  }
}

初期化ブロック

 初期化ブロックはコンストラクタよりも先に実行される処理を書くためのものであり、
オーバーロードされた複数のコンストラクタで同じ処理を先に実行させたい場合に利用する。
初期化ブロックは 中カッコ「{}」 で定義する。

public class Sample {
  Sample() {
    System.out.println("A");
  }
  //↓↓初期化ブロック↓↓
  {
    System.out.println("B");
  }
}
//結果: B A
//初期化ブロックがコンストラクタよりも先に実行されるため、B Aとなる

リンク集

【Javaの基本①】クラスの構造
【Javaの基本②】パッケージとインポート
【継承の操作②】インターフェース
【Javaのデータ型の操作①】プリミティブ型のデータ・参照型
【演算子と判定構造の使用①】論理演算子(&&、||)、同一性(==)、同値性(equals)
【演算子と判定構造の使用②】分岐処理(if、swich)
【配列の作成と使用】
【ループ構造の使用】while文、do-while文、for文、拡張for文
【メソッドとカプセル化の操作①】メソッドの概要
【メソッドとカプセル化の操作②】オーバーロード、コンストラクタ
【継承の操作①】クラスの継承
【例外の処理】
【Java APIの主要なクラスの操作】

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?