コンストラクタのオーバーロード
CoddyのJavaジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 8/87。
コンストラクタのオーバーロードとは、異なる引数リストを持つ複数のコンストラクタを持つことを意味します。あるコンストラクタから別のコンストラクタを呼び出すには、this() を使用します。
複数のコンストラクタ
public class Book {
private String title;
private String author;
private int pages;
public Book(String title, String author, int pages) {
this.title = title;
this.author = author;
this.pages = pages;
}
public Book(String title, String author) {
this.title = title;
this.author = author;
this.pages = 0;
}
}this() を使用したコンストラクタ・チェイニング
public class Book {
private String title;
private String author;
private int pages;
public Book(String title, String author, int pages) {
this.title = title;
this.author = author;
this.pages = pages;
}
public Book(String title, String author) {
this(title, author, 0); // 3引数のコンストラクタを呼び出す
}
public Book() {
this("Unknown", "Unknown"); // 2引数のコンストラクタを呼び出す
}
}使い方
Book b1 = new Book("1984", "Orwell", 328);
Book b2 = new Book("Dune", "Herbert");
Book b3 = new Book();this() はコンストラクタ内の最初のステートメントである必要があります。チェイニングにより、複数のコンストラクタ間での代入ロジックの重複を避けることができます。
チャレンジ
中級コンストラクタチェーンを使用して、Productクラスにオーバーロードされた3つのコンストラクタを作成してください:
- 3引数のコンストラクタ:
name,price,stock - 2引数のコンストラクタ:
name,price(stockのデフォルト値は 0) - デフォルトコンストラクタ:引数なし (
name= "Unknown",price= 0,stock= 0)
this() を使用してコンストラクタをチェーンさせ、コードの重複を避けてください。
自分で試してみよう
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
double price = Double.parseDouble(scanner.nextLine());
int stock = Integer.parseInt(scanner.nextLine());
Product product1 = new Product(name, price, stock);
Product product2 = new Product("Keyboard", 79.99);
Product product3 = new Product();
System.out.println("Product 1: " + product1.getName() + " - $" + product1.getPrice() + " (Stock: " + product1.getStock() + ")");
System.out.println("Product 2: " + product2.getName() + " - $" + product2.getPrice() + " (Stock: " + product2.getStock() + ")");
System.out.println("Product 3: " + product3.getName() + " - $" + product3.getPrice() + " (Stock: " + product3.getStock() + ")");
}
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
オブジェクト指向プログラミングのすべてのレッスン
4継承
継承の基本 (extends)super キーワードメソッドのオーバーライド (@Override)コンストラクタチェーンObject クラス単一継承と多段階継承なぜ多重継承ができないのかまとめ:従業員の階層構造