インタビュー - オブジェクト指向

:一般およびコンストラクタ関数の違い:

1.
コンストラクタ:オブジェクトが作成されると、そのオブジェクトを初期化するために、対応するコンストラクタを呼び出します。
一般的な機能:オブジェクトが作成された後、関数呼び出しを必要なとき。
2.
コンストラクタ:オブジェクトが作成されると、一度だけコールを呼び出します。
一般的な機能:オブジェクトが作成された後、複数回呼び出すことができます。

3.詳細:
1、完了した場合、設定されたコンストラクタ関数。必要に応じてメソッドを設定します。
2、一般的には、直接コンストラクタ関数を呼び出すことはできません。
図3は、コンストラクタ空隙が先行場合に一般的な関数となります。
4、コンストラクタはreturn文です。


II:コードブロック。

1、ローカルコードは高速です。{}メソッド
制御ローカル変数のライフサイクル。
図2に示すように、コードブロックの構成。クラスは、{}
のすべてのオブジェクトを初期化します。
図3に示すように、静的コードブロック。クラス静的{}
クラスが初期化されます。


3:このスーパー

現在のオブジェクトへ1.この参照、これは()のみ、このクラスのコンストラクタ(問題は、同じ名前のメンバ変数とローカル変数が同じオブジェクトかどうかを比較するために使用することができる解決することができる)の最初の行に定義することができる
2.super親オブジェクト参照、スーパー()サブクラスのコンストラクタの最初の行に定義することができる
サブクラスコンストラクタ3.この中で繰り返すことはできません()とスーパー()

4:静特性:

ローディング1.クラスロード
2に物体が存在すること嗜好
3は、すべてのオブジェクトによって共有される
4は、直接クラス名を呼び出すことができるクラス変数(メソッド/プロパティのクラス名):静的変数、インスタンス変数:メンバ変数、ローカル変数


5:メソッドのオーバーロードとの違いを上書き

過負荷、過負荷、同じクラス、異なる署名方式(同じメソッド名、パラメータの異なる数またはタイプ)にかかわらず、戻りのタイプの
、オーバーライド、二人の息子、一貫性のあるメソッドシグネチャ、許可サブクラス> =親クラスを書き換え、また、カバーとして知られている、民間の方法は、親クラスをオーバーライドすることはできません静的にのみ、静的静的または覆われているカバー、書き換え

 

6:オープンクローズ原理

拡張のためのオープン、修正のため閉鎖

 

7:最終的な特徴

図1に示すように、最終的には、改質剤であり、それは、クラス、メソッド、変数を変更してもよいです。
図2に示すように、最終的な修飾クラスが継承することができません。それは同時に、抽象と発生することはできません
3、最終修正方法を上書きすることはできません。
図4に示すように、最終的な修飾変数は一定であり、一回のみ割り当てられることができます。
なぜfinal変数を変更しました。プログラムデータが固定されている場合、実際には、
それにデータを直接使用していますが、この読書は貧弱であるため、データから名前です。
そして、この変数名の値を変更することはできませんので、プラス最終的には固定します。

書かれた仕様:定数すべて大文字、複数の単語、中間に接続_。


八:類似点と抽象クラスとインタフェース間の違い


単一継承、抽象的には、拡張
実現、インタフェースよりも、実装

:機能を
抽象クラス:クラスなしでそれを達成するための方法の文が抽象クラスと呼ばれている
抽象のインスタンスを作成することはできませんが、タイプ抽象クラスの変数を作成することができ、かつそれは特定のサブクラスを指して
何の抽象メソッドになることはできませんが、コンストラクタがあり、サブクラスの初期化を使用することができる
ようにAWTアダプタオブジェクトなどのオブジェクト、作成するために、他の人を防ぐために
は共存できない抽象的なキーワードとキーワードを?プライベート、静的、最終的

インタフェース:抽象クラスは、バリアントです。
メンバ変数:のpublic static final修飾静的定数
メンバ関数:パブリック抽象全ての方法は、AがB /インターフェースの親であるかどうかを確認するためのinstanceof Bと、抽象的

同じポイント:
常に抽出を予定されています。


異なる点:
1、抽象クラスを継承する必要があり、単一継承のみ。
インタフェースを実装する必要があり、より多くを達成することができます。
図2に示すように、抽象クラスが抽象メソッドと非抽象メソッドを定義することができ、サブクラスが継承し、非抽象メソッドを直接使用することができます。
のみ、インタフェースで定義された抽象メソッドは、サブクラスによって実装されます。
図3に示すように、抽象クラスはシステムの共通の基本的な内容の定義のもの、関係で延びています。
インタフェースの実装は、追加のシステム機能の定義では、関係のようなものです。


ナイン:オブジェクト指向の機能:


1. 抽象的、プライベート静的、最終的に共存させることはできません抽象抽象的なキーワードとキーワード?
特徴:一般的なと漠然とは、読むことができません!特に、プロセスの処理は、皮革実装の詳細ではありません。
メリット:多型の第3の特徴は、前提提供
2. パッケージプライベート
な機能を:隠されたオブジェクトのプロパティと実装の詳細、一般的なアクセス方法を提供します(私有財産、外部の公共の使用のための方法)が提供される
利点:安全性の向上、改善された再利用性、改善されたバリア性、容易なユーザビリティ
3. 継承を拡張し、absturts、
機能:統一モデルは階層的なクラスである、重量クラスへ一般的な方法を述べた
利点を:1、再利用性を向上させることができます。2、クラス間の第三の特徴との関係を生成するように、多型前提提供
継承欠点:カプセル破壊
4. 多型条件:継承された/実行される方法書き換え
機能を:物事のクラスを持っています様々な形の(パラメトリック多型、多型が含まれる)
の利益を:利点は、プログラムのスケーラビリティを向上させることが、
欠陥は、親クラス、サブクラス特異的方法アクセスできないに親クラスの参照の方法を使用してのみアクセス可能です。変換を必要とする、下方遷移(のサブクラスへの遷移)親サブクラスのinstanceof


ナイン2:その他


特長1.インターフェース:
外部被ばくルール
プログラムの機能拡張は、
カップリングコードを減らします

2.多型、メンバーの特性:
(1)メンバ変数。
コンパイル時:参照型の変数があり、呼ばれるメンバ変数がある場合に属し、コンパイル、失敗をコンパイルできません。
ランタイム:参照型の変数は、呼び出されたメンバ変数がある場合に属しており、変数はクラスに属するメンバーを実行します。
簡単に言えば:コンパイルとの両方が等号を参照して実行し、左側にああ。
理解されるように。

 

(2)メンバ関数(非静的)。
コンパイル時:関数呼び出しがある場合、参照型の変数が属します。そこでは、失敗をコンパイルし、コンパイルしていません。
ランタイム:参照がクラスオブジェクトが属するという関数があるかどうかです。
簡単に言えば:、見て左をコンパイルし実行するために見て右。

カバレッジ特性のメンバ関数があるため。


(3)静的関数。
編集:静的メソッド呼び出しの型の変数が所属あっ参照です。
ランタイム:静的メソッド呼び出しの型の変数が所属あっ参照です。
単純にすべてが見て、入れてコンパイルして実行左に。

実際には、静的メソッドのために、オブジェクトが必要とされていません。直接の呼び出しは、クラス名を使用することができます。


テン:内部クラス(クラスメンバーの内側、ローカル内部クラス、匿名内部クラス、静的な内部クラス)


インナークラスのアクセス特長:
1、内部クラスは、直接クラスの外部メンバーにアクセスすることができます。
2、内部クラスにアクセスするための外部クラスは、クラス内のオブジェクトを作成する必要があります。

1.内部クラスのメンバー
クラスの周辺部材は、囲んでいるクラスのすべてのメンバーのプロパティとメソッドが無制限にアクセスすることができ、プライベートにもかかわらず、しかし、クラス内のプロパティとメソッドにアクセスするためのクラスの周辺部材は、クラスの内部インスタンスを介してアクセスする必要があります。
内部クラスのメンバーは最初、二つのことに注意を払う必要があります:内部クラスメンバーは静的変数やメソッドを持つことはできません。第二:内部クラスのメンバは、クラスの周囲に取り付けられており、これだけ内部周辺を作成できるようにするクラスを作成しますクラス。
:内部クラスオブジェクト作成アウター新しい新=()内の新しい新しい();.でOuter.Inner
2.内部局所カテゴリ:
方法は、プロセスで使用することができ、特性、性質及び方法が失敗します。
内部ローカル位置に基づいてのみ修飾ローカル最終的にローカル変数にアクセスすることができます
内部クラスのオブジェクトを作成
3.静的な内部クラスの
クラスは静的である必要があり、内部クラスの静的メンバ内で定義されている場合。
内部クラスのオブジェクトを作成します。Outer.InnerでOuter.Inner(=新新);
4.匿名内部クラス
匿名サブクラスオブジェクト。
前提そこなければなりません:内部クラスが継承する、または外部クラスまたはインタフェースを実装する必要があります。
フォーマット:新しい新しい親クラスまたはインタフェース(){}サブクラスコンテンツ


XI:デザインパターン

1.シングルトン
飢えタイプ:クラスローダは、オブジェクトがすでに存在している(開発を推奨)
怠惰なタイプ:のgetInstance()メソッドはオブジェクトのみを作成呼び出すために、(多くの場合、面接のマルチスレッドのセキュリティは、そこにあるだけでクラスのロード、ないオブジェクトを、マルチスレッドの安全性の問題)

 

デザインパターン:問題の有効な解決策。実際には、それがアイデアです。
問題解決:メモリ内のオブジェクトのクラスの一意性を保証します。

複数のプログラムが同一の構成情報オブジェクトを使用しなければならないため、オブジェクトの一意性を確保する必要があります。

オブジェクトの一意性を確保するには?
1は、他のプログラムが新しいとクラスオブジェクトを作成することはできません。
図2は、このクラスのクラスのインスタンスを作成します。
図3は、外部のオブジェクトにアクセスすることができ、他のプログラムのための方法を提供します。

ステップ:
1、民営クラスのコンストラクタ。
図2に示すように、これは、本新規によってクラスベースのオブジェクトを作成します。
図3は、パブリックメソッドの定義が作成されるオブジェクトを返します。
//空腹中国風の
クラスシングル//クラスがロードされ、オブジェクトがすでに存在しています。
{
  プライベート静的新規新しいシングルシングルS =();
  プライベートシングル(){}
  パブリック静的単一のgetInstance()
  {
    戻りS;
  }
}


//怠惰なスタイルの
何物は、唯一のgetInstanceメソッドを呼び出すには、オブジェクトを作成していないだろうときに、クラスSingle2 //クラスが、中にロードされました。
//遅延ロードフォーム。
{
  プライベート静的Single2、S = NULL;
  プライベートSingle2、(){}
  パブリック静的Single2、のgetInstance()
  {
    IF(S == NULL)
      S = Single2、新しい新しい();
      Sを返します;
    }

  }
}


12:オブジェクトのインスタンス化のプロセス。

P =新たな新しい人の人();
1、JVM Person.classが指定されたパスにファイルを読み込み、メモリにロードされ、
そして(場合直接スーパークラスが存在する場合)人第一の親をロードする。
2アドレスを割り当てられたヒープメモリ内のスペースを開きます。
3、およびオブジェクト空間、オブジェクト属性のデフォルトの初期化インチ
図4は、対応するコンストラクタが初期化と呼びます。
5、コンストラクタで、最初の行は、最初の親クラスのコンストラクタが初期化呼びます。
初期化が親クラスを完了した後、図6に示すように、表示プロパティはサブクラスを初期化します。
図7に示すように、特定のサブクラスのコンストラクタの初期化中。
初期化が完了した後、図8に示すように、アドレス値は、基準変数に割り当てられます。

 

十二2:クラスのコンストラクタの実行シーケンス:

サブクラスのコンストラクタメソッドが開始
FUスーパークラスのコンストラクタを();
表示を初期化する
構成、初期化コードブロックは、
サブクラスのコンストラクタを終了します

おすすめ

転載: www.cnblogs.com/yueluoshuxiang/p/11367119.html