継承:オブジェクト指向の三つの特徴のひとつ
主な問題:一般的な抽出
相続の特性の中で:サブクラスは親クラス持つことができるのサブクラスは、独自の排他的なコンテンツを持つことができ、「コンテンツ」
フォーマット定義親クラス(クラスは、共通フォーマットの定義です)。
パブリッククラスのクラス名{
公開メソッドメソッド名タイプ{
}
}
サブクラスのフォーマットを定義します。
パブリッククラスサブクラス名が拡張し、親クラス名を{
// ........
}
サブクラスの変数に同じ名前を持つ親クラス変数場合は、オブジェクトの作成は、変数間の誰でも誰と優先事項です。
親クラスとサブクラスオブジェクト内の変数のメソッドは、その優先順位誰の間でメソッドを使用して作成されている場合。
メンバ変数は、親クラス、サブクラスのメンバ変数、ローカル変数を区別するために:
ローカル変数:直接利用
サブクラスのメンバ変数:。このメンバー変数名
親クラスのメンバ変数:スーパーメンバ変数名
親子クラスのコンストラクタアクセス機能:
サブクラスは、デフォルトでは使用して書かれていない、親クラスのコンストラクタを使用しなければなりませんスーパーを();あなたは一度だけ使用し、位置の最初のステートメントでなければならない場合。
スーパーのキーワード
- 親クラスのメンバーにアクセスする方法
- 親クラスのメンバ変数へのアクセス
- 親クラスのコンストラクタにアクセス
継承 3 主要な機能
単一継承(クラスのスーパークラスのみを持つことができますが)、マルチレベルの継承(親クラスは複数のトップレベルの親を持つことができ、親クラスが最も高い java.long.Object どのようにすることができ、親クラス(複数のサブクラス)サブクラス)
抽象メソッド
使用します。その内容はメソッドが何であるか不確かそれらのクラスは、メソッドは抽象クラスであり
構造:先行するメソッドの値を返し抽象的な、キーを削除ブレースが、抽象メソッドが抽象クラスの抽象クラス構造で定義することができなければなりませんクラス追加する前に、抽象キーを。
どのように使用するには:
例:メインメソッド
パッケージ peizeng。
パブリッククラステキスト{
公共の静的な無効メイン(文字列[]引数){
ZI ZI = 新しい ZI()。
zi.fu();
}
}
抽象親クラスと抽象メソッド
パッケージ peizeng。
パブリック抽象クラス府{
パブリック抽象ボイド FU();
}
親クラスのメソッドのサブクラスは、抽象メソッドのメソッドをオーバーライドします
パッケージ peizeng。
クラス公開 ZIと延び FU {
公共ボイド FU(){
システム。OUTの .println(" サブメソッドは、それを実行します! ");
}
}
親クラスは抽象クラスである場合は、サブクラスでも抽象クラスでない限り、サブクラスは、それ以外の場合はエラーを親クラスのすべての抽象メソッドをオーバーライドする必要があります
インターフェース
インターフェイスは共通仕様規格の一種であります
インタフェースの基本的なフォーマットを定義します:
パブリックインターフェイスインタフェース名{
// インタフェースコンテンツ
}
インタフェースが含まれます:定数、抽象メソッド、デフォルトの方法、静的メソッド、プライベートメソッドを。
手順を使用してインターフェイス:
1. インタフェースを直接使用することができない、そのインタフェースを「実現」を「実装クラス(同様のサブクラス)」が存在しなければなりません
フォーマット:
パブリッククラス実装クラス名は、実装インタフェース名を{
// ........
}
- インタフェースの実装クラスのインタフェースをカバーしなければならないすべての抽象メソッドをオーバーライド(実装)
- オブジェクトの実装クラスを作成し、使用すること
デフォルトのインターフェイスメソッド
デフォルトのインターフェイスメソッドは何である、つまり、インタフェースはインタフェースのエラーが定義されているので、新しい抽象メソッドは、デフォルトの方法を変更し追加する場合は、クラスをリードする、(新しい抽象メソッドを追加する)にアップグレードする必要があるとき、それは表示されませんこの状況では、定義されたインタフェースクラスは、デフォルトでは、デフォルトのメソッドを持つことになります。
デフォルトのメソッドの定義:
公共デフォルトの戻り値の型メソッド名(パラメータリスト){
// メソッド本体
}
静的メソッドインタフェース
静的メソッドを定義します:
パブリック静的戻り値の型メソッド名(パラメータリスト){
// メソッド本体
}
用法:介して直接使用する場合(インタフェース名。静的メソッド名)呼び出しは、クラスの目的を達成することができない呼び出します。
プライベートメソッドをインターフェース
方法は、唯一のインターフェイスで使用されることが意図されている場合、実装クラスに使用することは望ましくないが、プライベートメソッドとして定義することができます。
- 通常のプライベートメソッド:複数のデフォルトの方法との間に問題を解決するために、コードを繰り返して、
フォーマット:
プライベート戻り値の型メソッド名(パラメータリスト){
メソッド本体
}
- 静的プライベートメソッド:複数の静的メソッドの問題を越え、重複コードを解決
フォーマット:
プライベート静的な戻り値の型メソッド名(パラメータリスト){
メソッド本体
}
一定のインタフェース
メンバ変数もの
フォーマット:
public static final データ・タイプ定数名= データ値。
注意:
この 3つのキーワードは、省略することができるの割り当てを変更することはできません一度、首都の名前を割り当てる必要があります。
コール:インターフェイスの名前。定数名
使用インターフェイス上の注意
- クラスは一つだけの親を持つことができますが、複数のインタフェースを持つことができますが、
例:パブリッククラス実装クラス名が実装インタフェース名1 、インタフェース名2 {
// そうオーバーライドされたメソッドをカバー
}
2 インターフェースの複数の存在下で、同じ抽象メソッド場合、一方が上書きしなければなりません
3 .. デフォルトメソッド実装同じインターフェイスが複数ある場合、デフォルトの実装クラスがメソッドの競合をオーバーライドする必要があり上書き。
図4はまた、インターフェイスとインターフェイスを継承との間に存在してもよく、
例えば、インタフェースは、1つまたは複数のインターフェイスを継承する必要があります。
パブリックインターフェースのインターフェース名が伸びるインタフェース1 、インタフェース2 、...... {
// メソッド本体
}
多型:オブジェクト指向の3つの機能の一つ
コンセプト:サブクラスオブジェクトへの親出願
フォーマット:親クラスの名前 オブジェクト名 =新しいサブクラス名();
または インタフェース名の オブジェクト名 =新しい実装クラス名();
メンバ変数を使用するための多形のルール:
直接使用する:等号が残されている優先順位で来る、そして見上げるありません
間接の使用(メンバ変数法のメンバーによるアクセス):メソッドの優先順位は、掛け布団カバーが使用されているならば、見上げるが、クラスのサブクラスでオーバーライド新しい方法ではない人、である誰に属しています
メンバーの方法で多状態のルールを使用します。
見て、新しい実行を右に見て、見て左をコンパイルします。その後、すなわち、見上げるない、優先して来ること。
トランジションオブジェクト
強いデータと同様回転、幅広い操舵アップだけ小さい範囲が、サブクラス特定の方法を失うことになるプロセス
変換アップ(つまり、多状態書き込みです):
フォーマット:親クラスの名前 オブジェクト名 =新しいサブクラス名();
(元の親クラス・オブジェクト・サブクラスオブジェクトに復元するために、条件:対応するサブクラスオブジェクトでなければならない)下方遷移
フォーマット:名前サブクラスの オブジェクト名 = (サブクラス名)親クラスのオブジェクト();
使用のinstanceof 元の親クラス・オブジェクトのキーワードどのサブクラスオブジェクトを決定し、ブール値を返します
例:
動物犬=新しい新アニマル(); // これはアップキャストです
もし(犬のinstanceof動物){
// ......
}
最終的なキーワードは、最終的かつ不変を表し、
一般的な用途:
- クラスの修正:クラスはサブクラスを持つことができません。パブリック最終クラスXXX {...}
- この方法の修正:クラスは上書きできません。公共最終XXX {...}
- 1つのローカル変数を変更する:それは、参照アドレスデータタイプを変更することができない場合は、基本的なデータ型の場合、データは、割り当て後に変更することはできません。INT = 10数決勝。
- メンバ変数の変更:民間最終XXX xxが、あなたは、コンストラクタによって割り当てや割り当てを指示しなければなりません
内部クラス
すなわち、クラス内の別のクラスが含まれています。
カテゴリー:内部クラスメンバーとローカル内部クラス。
内部クラスのメンバー:
修飾クラスの外部名クラス{
修飾クラス内部クラス名{
// ...
}
// ...
}
用法:外部名クラス。オブジェクトのクラス名の内部名=新しい外側のクラス名().new 内部クラス名();
クラス内のクラスの外部メンバーメソッドにアクセスする方法:クラス名の外。.this 外部クラスのメンバ変数名
(定義されたクラスのメソッド内の)ローカル内部クラス:
修飾クラスの外部名クラス{
修飾 戻り型 メソッド名(パラメータリスト) {
クラス部分的内部クラス名{
// ......
}
}
}
注意:ローカル内部クラスへの順序でメンバ変数のアクセス方法は、メンバーが(有効でなければならない場合、最終回だけ割り当てることができる値)。
匿名内部クラス
インタフェースの実装クラスは一度だけの使用を必要とする場合、実装クラス匿名内部クラスを使用することを省略することができます。
定義フォーマット:
インターフェース名 、オブジェクト名 =新しいインタフェース名(){
// すべての抽象メソッドを上書き
} 。
注意:一度だけオブジェクトを作成する場合にのみ使用することができます