私はJavaプログラミングを学んでいます。そのため、次のようなコードが表示されることがあります。
Shape ball= new Shape();.// takes no parameter
Shape ball= new Shape(1,2); //takes parameter
私の質問は、オブジェクトに異なるパラメーターを取る複数のコンストラクターがある場合、どのコンストラクターを使用するかをどのように知ることができるでしょうか?
クラスのドキュメントを参照してください。それが唯一の確実な方法です。あなたが提供した Shape クラスには、おそらく 2 つのコンストラクターがあります。
Shape() //default no-args
{
//do something
}
Shape(int a, int b)
{
//do something with a and b
}
オブジェクトを作成するとき、パラメーターのないデフォルトのコンストラクターを持つことができ、特定のアクションを実行するため、パラメーターを指定しないと、このコンストラクターが呼び出されます。次に、別のアクションを実行するパラメーターを取る 2 番目のコンストラクターを作成できます。この用語は、私が信じているコンストラクターのオーバーロードと呼ばれています。どちらがアクティブになるかは、オブジェクトの作成時に引数で指定された内容に基づいています。
直接の質問によると、オブジェクトが受け取るパラメーターを見つけるには、そのオブジェクトのドキュメントを読む必要があります。他に調べる方法はありません。Visual Studio などの一部のツールでは、使用可能なすべてのオプションが表示されます。ただし、Visual Studio は Java ではなく、C# などの言語用です。
学習できる例を次に示します: http://www.leepoint.net/JavaBasics/oop/oop-45-constructor-overloading.html
Java では、コンストラクターを含め、任意のメソッドをオーバーロードできます。基本的には、同じ名前の複数のメソッドを持つことができることを意味しますが、引数の型やサイズが異なる必要があります。したがって、あなたの例では:
Shape ball= new Shape();.// takes no parameter
Shape ball= new Shape(1,2); //takes parameter
どこかに Shape クラスで定義された新しい Shape を作成するコンストラクタが少なくとも 2 つあることを意味します。1 つは引数を取らず、もう 1 つは 2 つの整数引数を取ります。ある意味で、呼び出す正しいメソッドを「選択」することについて心配する必要はありません。つまり、Java は、呼び出すパラメーターのみに基づいて、実行するメソッドを自動的に選択します。
あなたの決定は、コンストラクターに渡したいパラメーターを決定して、ジョブを最速で完了することになります。
以下のコード
Shape ball = new Shape(); // takes no parameter
デフォルト状態で新しいオブジェクトをインスタンス化します。この引数のないコンストラクターは、オブジェクトをデフォルトに初期化するため、デフォルトコンストラクターとも呼ばれます。
パラメーター化されたコンストラクターを呼び出すとき
Shape ball = new Shape(1,2); // takes parameters
カスタムの初期状態を与えるだけでなく、新しいオブジェクトをインスタンス化しています。上記の引数なしのコンストラクターがオブジェクトを初期化したものとは異なるもの。
異なるパラメーターを受け取る複数のコンストラクターを持つことは、コンストラクターのオーバーロードと呼ばれます。使用するコンストラクターの決定は、要件に依存します。たとえば、クラスに次の 2 つのコンストラクターがあるとします。Circle
public Circle() {
this.center = new Point(0, 0);
this.radius = 1;
}
public Circle(int x, int y, int r) {
this.center = new Point(x, y);
this.radius = r;
}
中心が (0,0) 以外の円、または半径が異なる円が必要な場合はいつでも、パラメーター化されたコンストラクターを使用します。
プログラマーは、コンストラクターを介して送信する必要があるパラメーターを知っている必要があります。送信するパラメーターがある場合は常にその値を渡しますが、そうでない場合は何も渡しません。それは実際には、システムを開発した開発者によって設定されたロジックです。
一部のクラス コンストラクターについてわからない場合は、その特定のクラスのドキュメントに依存できます。
キーワードthis
を使用して最初のコンストラクターを呼び出すことができます (つまり、コンストラクターを使用して別のコンストラクターを呼び出します)。