コンストラクターを拡張できますか?
質問者:Momath Imgraben |最終更新日:2020年2月12日
カテゴリ:テクノロジーおよびコンピューティングプログラミング言語
スーパークラスでのコンストラクターの呼び出し
Javaでは、クラスは別のクラスを拡張できます。クラスが別のクラスを拡張する場合、それは拡張するクラスから「継承」するとも言われます。拡張するクラスは、サブクラスと呼ばれ、拡張されたクラスは、スーパークラスと呼ばれています。コンストラクターをオーバーライドすることはできません。コンストラクターはオブジェクトで呼び出すことはできませんが、メソッドを呼び出すことはできます。コンストラクターを呼び出すには、オブジェクトを作成する必要があります。法の場合には、当社は、「サブクラスのメソッドがスーパークラスのメソッドを呼び出すことができます」と言います。
コンストラクターを継承できますか?コンストラクターはクラスのメンバーではなく、メンバーのみが継承されます。コンストラクターを継承することはできません。つまり、スーパークラスの1つのコンストラクターを使用してサブクラスのインスタンスを作成することはできません。
続いて、なぜコンストラクターがオーバーライドされないのかと疑問に思うかもしれません。
Javaではコンストラクターのオーバーライドは不可能です。これは、コンストラクターはメソッドのように見えますが、名前はクラス名であり、戻り値ではないためです。オーバーライドとは、スーパークラスで宣言したことを意味します。つまり、サブクラスで宣言する必要があるということは、オーバーライドと呼ばれます。
スーパークラスコンストラクターからサブクラスコンストラクターを呼び出すことはできますか?
5つの答え。サブクラスからのコンストラクタは、スーパークラスからコンストラクタを呼び出すことができますが、彼らのような継承されていません。 Sub(int)コンストラクターがないためです。コンストラクターは、初期化されるオブジェクトの暗黙的なパラメーターを持つ継承されていない静的メソッドと考えると役立つ場合があります。
39関連する質問の回答が見つかりました
コンストラクターを静的にすることはできますか?
コンストラクターはNON- STATICであり、Javaで静的として宣言することはできません。インスタンスは「new」演算子によって作成され、コンストラクターを呼び出すために初期化する必要はありません(コンストラクターがオブジェクトを初期化するため)。コンストラクターがオブジェクトとして呼び出されることはありません。メソッドのようなコンストラクター()。
コンストラクターはオーバーライドできますか?
コンストラクターをオーバーライドすることはできません。コンストラクターはオブジェクトで呼び出すことはできませんが、メソッドを呼び出すことはできます。コンストラクターを呼び出すには、オブジェクトを作成する必要があります。メソッドのオーバーライドでは、スーパークラスメソッドとサブクラスメソッドは同じである必要があります–同じ名前、同じリターンタイプ、同じパラメータリスト。
コンストラクターをプライベートにすることはできますか?
はい、クラスはプライベートコンストラクターを持つことができます。他のクラスからコンストラクターにアクセスすることを禁止し、定義されたクラス内でコンストラクターにアクセスできるようにする必要があります。シングルトンは、クラスのインスタンスを1つだけ作成できるデザインパターンであり、これはプライベートコンストラクターを使用して実現できます。
コンストラクターを最終にすることはできますか?
いいえ、コンストラクターをfinalにすることはできません。最終メソッドは、サブクラスによってオーバーライドできません。つまり、コンストラクターはJavaで継承できないため、コンストラクターの前にfinalを記述する必要はありません。したがって、javaではコンストラクターの前にfinalキーワードを使用できません。
コンストラクターは値を返しますか?
いいえ、コンストラクターは値を返しません。コンストラクタを宣言しているときには、戻り値の型のようなものを持っていません。一般に、コンストラクターはインスタンス化時に暗黙的に呼び出されます。そして、それはメソッドではなく、その唯一の目的はインスタンス変数を初期化することです。
静的メソッドをオーバーライドできますか?
答えは、いいえ、Javaで静的メソッドをオーバーライドすることはできませんが、サブクラスで同じシグネチャを持つメソッドを宣言することはできます。正確な意味でオーバーライドされることはなく、代わりにメソッド非表示と呼ばれます。 Javaコーディング規約に従い、静的メソッドにはオブジェクトではなくクラス名でアクセスする必要があります。
静的メソッドをオーバーライドできないのはなぜですか?
メソッドのオーバーライドのみ(すなわち、ランタイム)ダイナミックのコンテキストでメソッドの検索を発生するための静的メソッドをオーバーライドすることはできません。静的メソッド(名前による)は静的に(つまり、コンパイル時に)検索されます。メソッドのオーバーライドは、JavaやC ++などの言語に存在するサブタイプのポリモーフィズムのタイプで発生します。
Javaでどのように拡張しますか?
Javaスーパークラス(親)からサブクラス(子)を作成するには、キーワードextendsを使用します。あなたは、あなたが拡張する親クラスとキーワードを「拡張」に従ってください。 StudentResultsクラスからサブクラスを作成します。
抽象クラスはコンストラクターを持つことができますか?
はい、抽象クラスはJavaでコンストラクターを持つことができます。あなたは明示的に抽象クラスにコンストラクタを提供することが可能かそうでない場合、コンパイラは抽象クラスで引数なしのデフォルトコンストラクタを追加します。これはすべてのクラスに当てはまり、抽象クラスにも当てはまります。
this()とsuper()の両方をコンストラクターで使用できますか?
this()とsuper()はどちらもコンストラクター呼び出しです。コンストラクター呼び出しは常に最初のステートメントでなければなりません。我々は(スーパー呼び出すことができます)、あるいは、我々は両方のコンストラクタから)(これを呼び出すことはできませんが、どちらかのため、最初の文のように2つのステートメントを持つことができません、私たちはそう。
this()とsuper()はコンストラクターでどのように使用されますか?
this()とsuper()はコンストラクターでどのように使用されますか?コンストラクターはこれを使用して、同じクラス内の異なるパラメーターリストを持つ別のコンストラクターを参照します。コンストラクターはsuperを使用して、スーパークラスのコンストラクターを呼び出します。コンストラクターがsuperを使用する場合は、最初の行でそれを使用する必要があります。そうしないと、コンパイラは文句を言います。
構造のオーバーロードとは何ですか?
コンストラクターのオーバーロードは、各コンストラクターが異なるタスクを実行するように、異なるパラメーターリストを持つ複数のコンストラクターを持つという概念です。
インターフェイスを最終的なものにすることはできますか?
インターフェイスを最終的にします。
クラスfinalを宣言した場合、それを拡張することはできません。メソッドfinalを作成した場合、それをオーバーライドすることはできません。また、変数finalを作成した場合、それを変更することはできません。インターフェイスをfinalにすると、インターフェイスの目的そのものに反するメソッドを実装できなくなります。 C#でコンストラクターをオーバーライドできますか?
いいえ、コンストラクターをオーバーライドすることはできません。コンストラクターは単純に多態的に呼び出されないため、この概念はC#では意味がありません。コンストラクターはまったく継承されませんが、派生クラスのすべてのコンストラクターは、同じクラスの別のコンストラクター、または基本クラスのコンストラクターの1つにチェーンする必要があります。
Javaのポリモーフィズムとは何ですか?
Javaのポリモーフィズムは、単一のアクションをさまざまな方法で実行できる概念です。メソッドのオーバーロードとメソッドのオーバーライドにより、Javaでポリモーフィズムを実行できます。 Javaで静的メソッドをオーバーロードする場合、これはコンパイル時のポリモーフィズムの例です。ここでは、Javaのランタイムポリモーフィズムに焦点を当てます。
コールオーバーライドとは何ですか?
オブジェクト指向プログラミングでのメソッドのオーバーライドは、サブクラスまたは子クラスが、そのスーパークラスまたは親クラスの1つによってすでに提供されているメソッドの特定の実装を提供できるようにする言語機能です。
コンストラクターの戻りタイプは何ですか?
Javaのコンストラクタは、明示的に何も返しません。それらにはreturnタイプがなく、voidでさえありません。ただし、コンストラクターの定義が進むにつれて、クラスのオブジェクトを初期化するために使用されます。したがって、暗黙的に、コンストラクターを持つクラスの現在のインスタンスを返します。