オブジェクト指向プログラミングでは、コンストラクターは、オブジェクトを作成するために呼び出す特別な関数です。コンストラクターには、それらが機能することを可能にするいくつかの独自の機能があります。
Javaでは、クラスにちなんでコンストラクターに名前を付けます。コンストラクターは、適用されるクラスで定義されたメソッドです。 Javaコンストラクターは、オーバーロードを使用して代替の動作を提供する場合があります。 Javaのコンストラクターは、継承を利用してコードを再利用することもできます。
とにかくコンストラクタが必要なのはなぜですか?
コンストラクターはオブジェクト指向プログラミングの主力であり、Javaも例外ではありません。この例は、1つのデータプロパティと1つのメソッドを使用して基本的なCircleクラスを定義する方法を示しています。
public class Circle {
public double radius;
public double area() { return 3.14159 * radius * radius; }
}
次に、このクラスのインスタンスを作成して操作できます。
Circle c = new Circle();
c.radius = 2;
System.out.println(c.area()); // 12.56636
しかし、これはそれよりも便利で堅牢ではありません。データをカプセル化し、不正アクセスからデータを保護することは、オブジェクト指向の優れた方法です。
public class Circle {
private double radius;
public double area() { return 3.14159 * radius * radius; }
public void setRadius(double r) { radius = r; }
}
これで、呼び出し元のコードで setRadius メソッドとその実装の詳細について心配する必要はありません:
あなたのコンピュータの窓をきれいにする方法10
Circle c = new Circle();
c.setRadius(2);
コンストラクターは、オブジェクトを作成するときに、オブジェクトにデータを提供するさらに優れた方法を提供します。これらは、次のようなプロパティの初期化に非常によく使用されます。 半径 ここ。
単純なコンストラクターの例
最も基本的なコンストラクターは、引数のないコンストラクターであり、何もしません。
public class Circle {
public Circle() {}
}
コンストラクターを定義しない場合、Javaは同じように動作するデフォルトのコンストラクターを提供します。
いくつかの点に注意してください。
- コンストラクターの名前はクラス名と一致します。
- このコンストラクターは 公衆 アクセス修飾子。他のコードで呼び出すことができます。
- コンストラクターには戻り型は含まれていません。他のメソッドとは異なり、コンストラクターは値を返すことができません。
コンストラクターは通常、ある種の初期化を実行します。上記のコードはradiusの値を初期化しないことに注意してください。この場合、言語は自動的にゼロに設定します。このクラスは、ユーザーが使用することを期待しています setRadius() 。 0よりも便利なデフォルトを使用するには、コンストラクター内でデフォルトを割り当てることができます。
public class Circle {
public Circle() { radius = 1; }
}
このクラスで作成されたサークルには、少なくとも実際の領域があります。発信者は引き続き使用できます setRadius() 1以外の半径を提供します。ただし、コンストラクターはさらに使いやすくなります。
public class Circle {
public Circle(double r) { radius = r; }
}
これで、誕生からすぐに特定の半径の円を作成できます。
iPhoneで設定された医療ID
Circle c = new Circle(2);
System.out.println(c.area()); // 12.56636
これは、コンストラクターの非常に一般的な使用法です。多くの場合、変数をパラメーター値に初期化するためにそれらを使用します。
コンストラクターのオーバーロード
クラス定義で複数のコンストラクターを指定できます。
public Circle() { radius = 1; }
public Circle(double r) { radius = r; }
これにより、呼び出し元のコードでオブジェクトの作成方法を選択できます。
Circle c1 = new Circle(2);
Circle c2 = new Circle();
System.out.println(c1.area() + ', ' + c2.area()); // 12.56636, 3.14159
もう少し複雑なCircleを使用すると、より興味深いコンストラクターを探索できます。このバージョンはその位置を保存します:
public class Circle {
public double x, y, radius;
public Circle() { radius = r; }
public Circle(double r) { radius = r; }
public Circle(double x, double y, double r) {
this.x = x; this.y = y; radius = r;
}
public double area() { return 3.14159 * radius * radius; }
}
これで、引数なし、単一の半径、または半径に沿ったx座標とy座標を使用して円を作成できます。これは、Javaが任意のメソッドでサポートするのと同じ種類のオーバーロードです。
コンストラクター連鎖
別のサークルに基づいて1つのサークルを作成するのはどうですか?これにより、サークルを簡単にコピーできるようになります。次のブロックを確認してください。
public Circle(Circle c) {
this.x = c.x;
this.y = c.y;
this.radius = c.radius;
}
これは機能しますが、一部のコードが不必要に繰り返されます。 Circleクラスにはすでに個々のプロパティを処理するコンストラクターがあるため、代わりにを使用してそれを呼び出すことができます。 これ キーワード:
public Circle(Circle c) {
this(c.x, c.y, c.radius);
}
これは、コンストラクターチェーンの1つの形式であり、あるコンストラクターを別のコンストラクターから呼び出します。使用するコードが少なく、操作を複製するのではなく一元化するのに役立ちます。
親コンストラクターの呼び出し
コンストラクターチェーンのもう1つの形式は、コンストラクターがその親クラスのコンストラクターを呼び出すときに発生します。これは、明示的または暗黙的のいずれかです。親コンストラクターを明示的に呼び出すには、 素晴らしい キーワード:
super(x, y);
Circleの親として機能するShapeクラスを想像してみてください。
public class Shape {
double x, y;
public Shape(double _x, double _y) { x = _x; y = _y; }
}
これはすべての形状が共有する機能であるため、すべての形状に共通の位置決めを処理します。これで、Circleクラスは位置処理をその親に委任できます。
public class Circle extends Shape {
double radius;
public Circle(double r) { super(0, 0); radius = r; }
public Circle(double x, double y, double r) {
super(x, y);
radius = r;
}
}
スーパークラスの構築は、の非常に重要な側面です Javaでの継承 。明示的に呼び出さない場合、言語はデフォルトでそれを強制します 素晴らしい コンストラクターで。
コンストラクターのアクセス修飾子
コンストラクターは、署名にアクセス修飾子を含めることができます。他のメソッドと同様に、これはどのタイプの呼び出し元がコンストラクターにアクセスできるかを定義します。
public class Test {
private static Test uniqueInstance = new Test();
private Test() { }
public static Test getInstance() {
return uniqueInstance;
}
}
これはより複雑な例なので、理解するように注意してください。
- クラスは抽象的ではないため、そこからインスタンス化することができます。
- コンストラクターはプライベートであるため、このクラス自体のみが新しいインスタンスを作成できます。
- 静的プロパティとメソッドを介して、クラスはそれ自体の単一の一意のインスタンスを呼び出し元に公開します。
Javaでコンストラクタを使用してオブジェクトを作成する
コンストラクターは、オブジェクト指向プログラミングに不可欠です。彼らはあなたがオブジェクトを作成することを可能にします、それは不可欠です!
Javaでは、コンストラクターは他のメソッドと同じように見え、ほとんど同じように機能します。デフォルトのコンストラクター、オーバーロード、およびコンストラクターチェーンに関する特別なルールを覚えておく必要があります。コンストラクターが初めての場合は、開始時に学習する必要のある他のコアJavaの概念を確認することをお勧めします。
共有 共有 つぶやき Eメール 始めるときに学ぶべき10のコアJavaの概念GUIを作成している場合でも、サーバー側ソフトウェアを開発している場合でも、Androidを使用してモバイルアプリケーションを開発している場合でも、Javaを学ぶことは役に立ちます。始めるのに役立つJavaのコアコンセプトをいくつか紹介します。
次を読む 関連トピック- プログラミング
- Java
- コーディングのヒント
ボビーは、20年のほとんどの間ソフトウェア開発者として働いた技術愛好家です。彼はゲームに情熱を注いでおり、Switch Player Magazineのレビュー編集者として働いており、オンラインパブリッシングとウェブ開発のあらゆる側面に没頭しています。
サインアップせずに無料の映画を見るボビージャックのその他の作品
ニュースレターを購読する
ニュースレターに参加して、技術的なヒント、レビュー、無料の電子書籍、限定セールを入手してください。
購読するにはここをクリックしてください