使用するJavaSE顔質問:クラスとインスタンスの初期化初期化

クラスの初期化処理

あなたがクラスをロードして初期化する必要があるクラスのインスタンスを作成するための1、

   必要性がロードおよび初期化するクラスの主なメソッド

2、初期化するサブクラスは親クラスを初期化する必要があります

図3に示すように、クラスの初期化が行われる<clinit>()メソッド

<clinit>()メソッドが表示される静的クラス変数割り当てコードとコードの静的ブロックからなります

クラス可変表示上から下へのブロックの割り当てコードと静的コード実行順序

<Clinit>()メソッドは、一度だけ実行されます

 

初期化プロセスの例

図1に示すように、初期化が実行される例<初期化>()メソッド

<初期化>()メソッドがオーバーロードを複数有していてもよく、いくつかのコンストラクタは、いくつかの<init>方法が有しています

<INIT>()メソッドは表示されたコードは、非静的インスタンス変数が割り当てられる、非静的コードブロックからなる対応する構成コードを

非静的インスタンス変数が表示され、上から下へのコードブロックの実行順序の非静的割り当て、対応する最終的な実行コードコンストラクタ一方

各インスタンスを作成し、対応するコンストラクタが対応する<初期化>メソッド呼び出しが行われます

最初の行の<init>メソッドはスーパー()またはスーパー(インスタンスのリストである)、すなわち、親に対応する<初期化>方法

(スーパーは、書き込み、またはまったく書いていない、サブクラスのコンストラクタで親クラスのコンストラクタを呼び出します)

 

書き換えのオーバーライドメソッド

メソッドをオーバーライドすることができない1、

最後の方法

staticメソッド
不可視の方法などのプライベートサブクラス

2つの多型のオブジェクト

実際には、以前の非静的メソッドは、このデフォルトのターゲットを持っています

それは子オブジェクト作成されるため、オブジェクトが作成されることを示し、この構成(または<INIT>)で、

試験()サブクラスオーバーライド実行コード(オブジェクト指向の多型)であります

 

高度な要件

差分オーバーライド(リライタブル)と過負荷(過負荷)の

書き換えのみ子と親クラスに存在する、過負荷のクラスがAに存在します

次のように具体的な相違点は次のとおりです。 
まず、オーバーライド(上書き)

オーバーライドは、異なる機能を達成するために、(上書き)メソッドを書き換えられます。サブクラスは(再実装)親クラスをオーバーライドし、親クラスを継承する際に一般的に用いられています。 
:規則(カバレッジ)リライト 
1を、方法書き換えるパラメータリストを上書きする方法とまったく同じでなければなりませんが、それ以外過負荷に書き換えるために呼び出すことができませんでした。 
しなければならない2、アクセス修飾子の書き換え方法アクセス修飾子は、メソッド(パブリック>保護>デフォルト>プライベート書き換えられより大きい  )。
図3に示すように、戻り値はメソッドと一致しなければならないオーバーライドする書き換えることに戻り、 
4、メソッドオーバーライド例外スローされた例外がスローされ、一貫した方法を書き換え、またはサブクラスでなければなりません; 
5、方法はプライベートに書き換えることができない、またはその新しいサブクラスが唯一の方法を定義する、それを上書きしないがだありません。 
6、静的メソッドをオーバーライドすることができない方法で(コンパイルエラー)非静的です。

過負荷が過負荷になっている二つは、方法は、一般的に、これらの方法の種々のパラメータのクラスのオーバーロードされた、同じ名前とフォームの数に実装されます。 
過ルール: 
1、同じメソッド名によって過負荷に使用する場合、異なるパラメータを実装するだけ、形パラメータの異なるタイプが異なるパラメータタイプ、異なるパラメータの数、異なるシーケンス・パラメータ(とすることができるパラメータの種類は異なっていなければならない); 
戻り値の型にアクセスすることができない、2、スローされた例外が過負荷; 
3、方法例外の種類と数は、オーバーロードには影響しません。 
多型の概念は、より複雑で、多状態感覚の様々ながあり、興味深いが、厳密ではない引数は次のとおりです。継承は、サブクラス親クラスを使用しており、多型使用方法は、親クラスのサブクラスです。 
一般的に、我々は、多型は、親クラスのコードの多くは肥大化し、維持するのは難しいです原因オーバーロードを避けるためである使用します。

 

 

要件を上書き上書き?

1は、サブクラスのオーバーライドメソッドは、同じ名前を持つ必要がありますし、親クラスのパラメータリストが書き換えられます

サブクラスのメソッドの戻り型は、親クラス上書きされない戻り型より大きいオーバーライド2、

3、サブクラスを使用してアクセスする方法が書き換えられるため、親アクセス方式よりも小さくないオーバーライド

サブクラスは、親クラスのメソッドは、私権を宣言オーバーライドすることはできません

4、サブクラス例外スローされた例外は、親クラスがメソッド書き換えられるよりも大きくありません

 

<clinit>との<init>メソッド、invokespecial命令の説明に「JVM仮想マシン仕様」を学びます

 

おすすめ

転載: www.cnblogs.com/helloworld0903/p/11462875.html