ホームページ >Java >&#&チュートリアル >Java 基礎入門エッセイ (11) JavaSE 編 - 継承、オーバーライド、抽象クラス
1. オブジェクト指向の機能 2: 継承
定義:
は、あるオブジェクトが別のオブジェクトのプロパティとメソッドを直接使用することを意味します。
継承の利点:
1. コードの再利用性を提供します。
2. クラス同士に直接の関係を持たせ、3 番目の特徴的な多態性の前提条件を提供します。
単一継承は Java でサポートされています。多重継承は直接サポートしませんが、C++ の多重継承メカニズムを改善します。
単一継承: サブクラスは親クラスを 1 つだけ持つことができます。
多重継承: サブクラスは複数の直接の親クラスを持つことができます (Java では許可されていません、改良されました、直接サポートされていません。複数の親クラスが同じメンバーを持つため、呼び出しの不確実性が生じます。Java ではそれが反映されます)
Java はマルチレベル (複数) の継承をサポートしています (たとえば、C が B を継承し、B が A を継承する場合、継承システムが表示されます。)
(ナンセンスではありません: 継承を使用したい場合. システムを構築するとき、 1 システムの基本的な機能を理解するためにクラス内のトップレベルのクラスを確認します。 2 システム内でサブクラス オブジェクトを作成して、機能の使用を完了します。それらの間に所有権関係がある場合、それは継承として定義されます (xxx は yyy の型です。xxx は yyy を拡張します)
このクラスのメンバーがローカル変数と同じ名前を持つ場合、これを使用して区別します。子クラスと親クラスのメンバー変数は同じ名前です。 super の使用法は、
this: このクラスのオブジェクトへの参照を表します。オーバーライド
概念: 子親クラスのメンバー関数がまったく同じである場合、子クラスの関数が実行されます
この現象はオーバーライド操作と呼ばれます
関数の 2 つの特徴: 1.オーバーライド
2. 静的は静的をオーバーライドするか、静的によってオーバーライドされるだけです。
サブ親クラスのコンストラクターの特徴
サブクラスがオブジェクトを構築するときに、サブクラスのコンストラクターにアクセスするときに親クラスも実行されることがわかります。
その理由は、サブクラスのコンストラクターの最初の行に、デフォルトの暗黙的なステートメントがあるためです。 ();
サブクラスのインスタンス化プロセス: サブクラス内のすべてのコンストラクターは、デフォルトで親クラスの空のパラメーター コンストラクターにアクセスします。
サブクラスがインスタンス化されるときにコンストラクターにアクセスする必要があるのはなぜですか?
それは、サブクラスが親クラスを継承し、親クラスのコンテンツ (プロパティ) を取得するためです。そのため、親クラスのコンテンツを使用する前に、親クラスがどのように独自のコンテンツを初期化するかを確認する必要があります。オブジェクトを構築する際、サブクラスは親クラスのコンストラクターにアクセスする必要があります。この必要なアクションを完了するには、サブクラスのコンストラクターに super() ステートメントを追加します。
親クラスに空のパラメーター コンストラクターが定義されていない場合、サブクラスのコンストラクターは super を使用して、親クラスのどのコンストラクターを呼び出すかを指定する必要があります。同時に、サブクラス コンストラクターでこのクラスのコンストラクターを呼び出すために this が使用される場合、super と this は最初の行しか定義できないため、super はなくなります。したがって、存在できるのは 1 つだけです。ただし、親クラスのコンストラクターにアクセスする他のコンストラクターがサブクラス内に確実に存在することが保証されています。
注: supre ステートメントは、サブクラス コンストラクターの最初の行で定義する必要があります。親クラスの初期化アクションが最初に完了する必要があるためです。
オブジェクトのインスタンス化プロセス:
たとえば、 Person p = new Person();
1 の場合、JVM は指定されたパスにある Person.class ファイルを読み取ってメモリにロードし、親クラスをロードします。 (直接の親クラスがある場合)
2. ヒープメモリに領域を作成し、アドレスを割り当てます。
3 オブジェクト空間で、オブジェクトのプロパティをデフォルトで初期化します。
4. 初期化のために対応するコンストラクターを呼び出します。
5. コンストラクターでは、最初の行で最初に親クラスのコンストラクターを呼び出して初期化します。
6. 親クラスが初期化された後、サブクラスの属性が表示され、初期化されます。
7、次に、サブクラス コンストラクターの特定の初期化を実行します。
8. 初期化後、アドレス値を参照変数に代入します (手順は次のとおりです):
3.final キーワード
1.final はクラスを変更できる修飾子です。メソッド、変数。
2. 最終的に変更されたクラスは継承できません。
3.最終的に変更されたメソッドはオーバーライドできません。 (ここで static との違いに注意してください。サブクラスが static の場合でもオーバーライドできます)
4. Final によって変更された変数は定数であり、代入できるのは 1 回だけです。
変数を変更するために Final を使用する必要があるのはなぜですか?実際には、プログラム内でデータが固定されていれば、それを直接使用することもできますが、これでは読み取れないため、データに名前が付けられます。また、この変数名の値は変更できないので、finalを付けることで固定されます。
標準的な書き方: 定数の文字はすべて大文字で、複数の単語を使用し、真ん中に _ を付けて結合する必要があります。
継承の欠点:
継承の欠点は、カプセル化を中断することです (解決策は、最終宣言に修飾子 Final を使用することです)
4. 抽象クラス
抽象: 曖昧で、一般的で、理解不能で、具体的ではありません。
特徴:
1. メソッドが宣言されているだけで実装されていない場合、そのメソッドは抽象メソッドであり、abstract によって変更する必要があります。抽象メソッドは抽象クラスで定義する必要があり、そのクラスも抽象によって変更する必要があります。
2. 抽象クラスはインスタンス化できません。 (理由: 抽象メソッドを呼び出しても意味がないため)
3. 抽象クラスは、インスタンス化される前に、そのサブクラスによってカバーされるすべての抽象メソッドを持たなければなりません。それ以外の場合、このサブクラスは依然として抽象クラスです。
質問の理解:
1. 抽象クラスにコンストラクターはありますか? 一部はサブクラス オブジェクトを初期化するために使用されます。
2. 抽象クラスは抽象メソッドを定義できませんか?可能ですが、まれです。その目的は、このクラスがオブジェクトを作成しないようにすることです。 AWTのアダプタオブジェクトはこのクラスです。通常、このクラスのメソッドにはメソッド本体がありますが、コンテンツはありません。 eq: void show(){}この型にはメソッド本体がありません
3. 抽象キーワードと共存できないキーワードはどれですか?
private は機能しません。private は親クラスのみに知られており、抽象化をオーバーライドする必要がありますが、サブクラスはそれをオーバーライドできないため、private と共存できません。
static いいえ、メンバーが static の場合はクラス名で直接呼び出すことができますが、メソッドは抽象的な具体的なメソッド本体ではないため、共存できません。
最終No.最終セットのメンバーとクラスはオーバーライドまたは継承できないため、共存できません。
4. 抽象クラスと一般クラスの類似点と相違点は何ですか?
類似点: 抽象クラスと一般クラスは両方とも物事を記述するために使用され、どちらも内部メンバーを持っています。
違い: 1. 一般クラスには物事を説明するのに十分な情報が含まれていますが、抽象クラスには物事を説明するのに十分な情報がない場合があります。 2. 一般クラスでは抽象メソッドを定義できず、非抽象メソッドのみ定義できます。抽象カテゴリは抽象メソッドとして定義でき、非抽象メソッドも定義できます。
3. 一般クラスはインスタンス化できますが、抽象クラスはインスタンス化できません。
5. 抽象クラスは親クラスである必要がありますか? はい。サブクラスをインスタンス化するには、その前にサブクラスのメソッドをオーバーライドする必要があるためです。
以上は Java の基本的な入門エッセイ (11) JavaSE バージョン - 継承、上書き、抽象クラスの内容です。その他の関連内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。