1. 継承 (キーワード: extends): (子親クラス)
1. コードの再利用性を向上します。
2. クラス間の関係を作成します。この関係があって初めてポリモーフィズムの特徴を持つことができます。
1.1 変数
同じ名前の非プライベート (プライベート) メンバー変数が子の親クラスに現れた場合、子クラスはこのクラスの変数にアクセスして this を使用し、子クラスはその変数にアクセスする必要があります親クラスに同じ名前がある場合は、super を使用します。
superの使い方はthisの使い方とほぼ同じです。
これはこのクラスのオブジェクトへの参照を表します。
superで表される親クラスオブジェクトの参照。
1.2 子クラスと親クラスの関数
親クラスと全く同じ関数がサブクラスに現れた場合、
サブクラスのオブジェクトがその関数を呼び出すと、サブクラスの関数の内容が実行されます。親クラスの関数がオーバーライドされるのと同じです。
この状況も、関数の書き換え(上書き)の特徴です
サブクラスが親クラスを継承すると、親クラスの関数をサブクラスに引き継ぎますが、サブクラスは関数を持っているものの、その関数の内容は現時点では、新しい関数を定義する必要はありません。代わりに、オーバーライド機能を使用して、親クラスの関数定義を保持し、関数の内容を書き換えます。
上書きに関する注意事項:
1. サブクラスが親クラスを上書きする場合、上書きする前にサブクラスの権限が親クラスの権限以上であることを確認する必要があります。そうでない場合、コンパイルは失敗します。 。 (パーミッション修飾子を書かない場合、デフォルトのパーミッションはプライベートとパブリックの間になります。)
2. static は static のみをオーバーライドできます。
オーバーロードと書き換え:
オーバーロード: 同じ名前の関数のパラメーター リストのみを確認します。
書き換え: 子クラスと親クラスのメソッド名と戻り値の型はまったく同じである必要があります。 (つまり、戻り値の型とメソッド名 () は同じである必要があります)
1.3 サブクラスのコンストラクター。
サブクラス オブジェクトを初期化すると、親クラスのコンストラクターも実行されます。これは、サブクラスのコンストラクターの最初の行に暗黙的なステートメント super() が含まれるためです。
サブクラスが親クラスのコンストラクターにアクセスする必要がある理由クラス。
親クラス内のデータサブクラスは直接取得できるため、すべてのサブクラスオブジェクトを作成したら、まず親クラスがどのようにデータを初期化しているかを確認する必要があります。したがって、オブジェクトを初期化するとき、サブクラスはまず親クラスのコンストラクターにアクセスする必要があります。親クラスで指定されたコンストラクターにアクセスしたい場合は、super ステートメントを手動で定義することで指定できます。
注: スーパー ステートメントは、サブクラス コンストラクターの最初の行で定義する必要があります。
結論:
サブクラスのすべてのコンストラクターは、デフォルトで親クラスの空のパラメーターを使用してコンストラクターにアクセスします。
サブクラスの各コンストラクターの最初の行には暗黙の super() が含まれるため、
親クラスに空のパラメーターを持つコンストラクターがない場合、サブクラスはスーパーの形式で親クラスへのアクセスを手動で指定する必要があります。ステートメントのコンストラクター。
もちろん、サブクラスのコンストラクターの最初の行でこのステートメントを手動で指定して、このクラスのコンストラクターにアクセスすることもできます。サブクラスには、親クラスのコンストラクターにアクセスするコンストラクターが少なくとも 1 つ存在します。 (this() と super() は両方ともコンストラクターの最初の行にのみ配置できるため、コンストラクター内に存在できるのはどちらか 1 つだけです。)
注: 他の関数を取得するためにコードを単純化しないでください。クラスと継承。クラスを継承するには、クラス間に関係が必要です。所属は 。
2.final: ついに。修飾子として。
2.1 クラス、関数、変数は変更できます。
2.2 Finalで変更されたクラスは継承できません。継承を回避するには、サブクラスによる関数のオーバーライドを避けてください。
2.3 Final によって変更されたメソッドはオーバーライドできません。
2.4 Final によって変更された変数は、値を 1 回だけ割り当てることができる定数です。メンバー変数またはローカル変数のいずれかを変更できます。物事を説明する際、何らかのデータが登場する場合、可読性を高めるために、その値に名前が付けられます。読みやすい。この値は変更する必要がないため、最終的な変更が追加されます。 定数として: 定数が複数の単語で構成されている場合、定数の表記規則はすべて大文字です。単語は_で結ばれます。 (例: Final double PI = 3.14; Final int SET_ON = 1;)
2.5 内部クラスがクラス内のローカルな場所で定義されている場合、final によって変更されたローカル変数にのみアクセスできます。
3. 抽象化:
3.1 抽象メソッドは抽象クラス内に存在する必要があります。
3.2 抽象メソッドと抽象クラスは両方とも、abstract キーワードを使用して変更する必要があります。 (抽象クラス クラス名 { 抽象 void メソッド名 (); })
3.3 抽象クラスはオブジェクトの作成に new を使用できません。抽象メソッドを呼び出しても意味がないからです。
3.4 抽象クラスで抽象メソッドを使用するには、すべての抽象メソッドをサブクラスで書き換える必要があります。その後、サブクラス オブジェクトを呼び出すことができます。サブクラスが一部の抽象メソッドのみをカバーする場合、そのサブクラスは依然として抽象クラスです。
一般クラスと抽象クラスの類似点と相違点: 抽象クラスと一般クラスの間には大きな違いはありません。物事をどのように説明しても構いませんが、理解できない点もいくつかあります。物の機能でもあるこれらの不確定な部分は、明示的に現れる必要があります。しかし、主題を定義することはできません。抽象メソッドを通じて表現されます。
抽象クラスには、通常のクラスよりも 1 つ多くの抽象関数があります。つまり、クラス内に抽象メソッドを定義できます。
抽象クラスはインスタンス メソッドを持つことができません。
特別: 抽象クラスで抽象メソッドを定義する必要はありません。これにより、クラスがオブジェクトを作成できなくなるだけです。
4. テンプレートのデザインパターン:
関数を定義するとき、関数の一部は確実ですが、一部は不確実であり、その一部が不確実な部分を使用すると、不確実な部分が露出します。これは、このクラスのサブクラスによって行われます。
5. インターフェース:
初期理解は特別な抽象クラスとして考えることができます。抽象クラスのメソッドが抽象である場合、クラスはインターフェイスの形式で表現できます。
class: クラスを定義するために使用されます
interface: インターフェイスを定義するために使用されます。インターフェイスも型です。クラスファイルを生成することができます。
インターフェイスを定義するときの形式の特徴:
1. インターフェイスの共通定義: 定数、抽象メソッド。インターフェースの出現は、「多重継承」を別の形、つまり「多重実装」で具体化します。
2. インターフェース内のメンバーには固定修飾子があります。
定数: public static Final
メソッド: public abstract
覚えておいてください: インターフェイス内のすべてのメンバーは public です。
インターフェース:抽象メソッドがあるためオブジェクトを作成することはできません。これはサブクラスによって実装される必要があります。サブクラスがインターフェイス内のすべての抽象メソッドを書き換えた後でのみ、サブクラスをインスタンス化できます。それ以外の場合、サブクラスは抽象クラスになります。
例:interface Inter
{
//インターフェース内のメンバーには固定修飾子があるため、public static Final 修飾子と public abstract 修飾子が欠落していても問題ありません。ただし、読みやすさを高めるために、開発中に記述するのが最善です。
public staticfinal int SET_ON = 1;
public abstract void show();
}
//インターフェイス実装を使用する
class Test実装 Inter
{
public void show(){} //抽象メソッドshowをオーバーライドする必要があるCreate object
}
class InterfaceDemo
{
public static void main(String[] args)
{
Test t = new Test();
System.out.println(t.SET_ON);
}
}
インターフェイスの特徴:
インターフェイスは、外部の世界に公開されるルールです。
インターフェースはプログラムの機能拡張です。
インターフェースは複数の実装に使用できます。
クラスとインターフェースの間には実装関係があり、クラスは一つのクラスを継承し、同時に複数のインターフェースを実装することができます。
インターフェース間には継承関係が存在する可能性があります。
6. ポリモーフィズム:
定義: 特定のタイプのものの複数の存在形態。
例: 動物の中の猫と犬
猫オブジェクトの対応するタイプは猫タイプです
猫 x = new cat()
同時に猫も動物の 1 つであり、動物とも呼ばれます。
Animal y = new cat();
Animal は、猫と犬の特定のものから抽出された親の種類です。
親型参照はサブタイプオブジェクトを指します。
6.1. ポリモーフィズムの反映:
親クラスの参照は、自身のサブクラスオブジェクトを指します。
親クラスの参照は、独自のサブクラス オブジェクトを受け取ることもできます。
例:親クラス 親クラス参照名 = new subclass();//型昇格。上向きの変革。サブクラスの独自の機能を使用するには、下向きに変換する必要があります: subclass 新しいサブクラス参照名 = (サブクラス) 元の親クラス参照名
キーワード:instanceof は参照型を決定します
例: if (ainstanceof Cat)//determine a猫タイプなのかな?
6.2. ポリモーフィズムの前提条件:
クラス間に関係が存在する必要があります。継承するか実装するかのどちらかです。
通常、サブクラスはオーバーライド (書き換え) する必要があるという前提条件があります。
6.3. ポリモーフィズムの利点:
ポリモーフィズムの出現により、プログラムのスケーラビリティが大幅に向上しました。
6.4. ポリモーフィズムの欠点:
スケーラビリティが向上しますが、親クラスのメンバーにアクセスするには親クラスの参照しか使用できません。
6.5 ポリモーフィズムにおける非静的メンバー関数の特性:
コンパイル時: 参照変数が属するクラスに呼び出しメソッドがあるかどうかを確認します。存在する場合、コンパイルは成功します。存在しない場合、コンパイルは失敗します。
実行時: オブジェクトが属するクラスに呼び出されるメソッドがあるかどうかを確認します。
簡単にまとめると、メンバー関数がポリモーフィカルに呼び出される場合、コンパイル時には左側を見て、実行時には右側を見てください。
6.6 ポリモーフィズムにおけるメンバ変数の特徴:
コンパイル時、実行時に関わらず、左記(参照変数が属するクラス)を参照
ポリモーフィズムにおける静的メンバー関数の特徴:
コンパイル時、実行時に関わらず、左記を参照左側 (静的自体を直接呼び出すことができます)。
7.object: すべてのオブジェクトの直接的または間接的な親クラスであり、伝説の神です。
このクラスで定義されるのは、すべてのオブジェクトが持つ機能でなければなりません。
内部クラスのアクセス規則:
1. 内部クラスは、プライベートクラスを含む外部クラスのメンバーに直接アクセスできます。
2. 内部クラスにアクセスするには、外部クラスは内部クラスのオブジェクトを作成する必要があります。
以上がJava 機能の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。