継承 Java (例付き)
継承とは何ですか?
継承 あるクラスが別のクラスのプロパティを取得するメカニズムです。 たとえば、子供は両親の形質を受け継ぎます。 継承を使用すると、既存のクラスのフィールドとメソッドを再利用できます。 したがって、継承は再利用性を促進し、OOP の重要な概念です。
継承とは何か Java?
Java 継承 あるクラスが別のクラスのプロパティを取得するメカニズムです。 Java2つのクラスの間に「Is-A」関係が存在する場合、継承を使用します。親クラスはスーパークラスと呼ばれ、継承されたクラスはサブクラスと呼ばれます。キーワード extends
サブクラスはスーパークラスの機能を継承するために使用されます。継承はコードの再利用性につながるため重要です。
Java 継承構文:
class subClass extends superClass { //methods and fields }
継承の種類 Java
継承にはさまざまな種類があります Java:
- 単一継承
- 多重継承
- マルチレベルの継承
- 階層継承
- ハイブリッド継承
1. 単一継承:
単一継承では、XNUMX つのクラスが別のクラスを拡張します (XNUMX つのクラスのみ)。
上の図では、クラス B はクラス A のみを拡張します。クラス A はスーパークラスで、クラス B はサブクラスです。
2. 多重継承:
多重継承は、 Java 1 つのクラスが複数のクラスを拡張するタイプ。 Java 多重継承をサポートしていません。
上の図のように、クラス C はクラス A とクラス B の両方を拡張します。
3. 多段階継承:
多レベル継承では、XNUMX つのクラスが派生クラスから継承できます。 したがって、派生クラスは新しいクラスの基本クラスになります。
図に示すように、クラス C は B のサブクラスであり、B はサブクラス クラス A のサブクラスです。
4. 階層的継承:
階層継承では、1 つのクラスが多数のサブクラスに継承されます。
上記の例のように、クラス B、C、および D は同じクラス A を継承します。
5. ハイブリッド継承:
ハイブリッド継承は、 Java これは単一継承と多重継承の組み合わせです。
上記の例のように、クラス A のすべてのパブリック メンバーと保護されたメンバーは、最初にクラス B を介して、次にクラス C を介してクラス D に継承されます。
注意: Java ハイブリッド/多重継承をサポートしていない
継承 Java 例:
継承の例は次の通りです。 Java:
class Doctor { void Doctor_Details() { System.out.println("Doctor Details..."); } } class Surgeon extends Doctor { void Surgeon_Details() { System.out.println("Surgen Detail..."); } } public class Hospital { public static void main(String args[]) { Surgeon s = new Surgeon(); s.Doctor_Details(); s.Surgeon_Details(); } }
スーパーキーワード
superキーワードは「this」キーワードに似ています。キーワードsuperは親クラスの任意のデータメンバーまたはメソッドにアクセスするために使用できます。superキーワードは次の場合に使用できます。 変数、メソッドとコンストラクターのレベル。
構文:
super.<method-name>();
また、チェックしてください:- このキーワード Java: 例文と使い方
例を使用して OOP の継承を学ぶ
同じ銀行アプリケーションを考えてみましょう。 前の例。
XNUMX つの異なる口座タイプを開くことになっており、XNUMX つは貯蓄用、もう XNUMX つは小切手用 (当座とも呼ばれます) です。
コーディングにどのようにアプローチできるかを比較して検討してみましょう。 構造化されたオブジェクト指向プログラミングの観点。
構造的アプローチ: 構造化プログラミングでは、XNUMX つの関数を作成します –
- 撤退する人
- そしてもう XNUMX つは入金アクション用です。
これらの機能の動作はアカウント間で同じままであるためです。
OOPのアプローチ:使用中 おっとっと プログラミング的なアプローチ。 XNUMX つのクラスを作成します。
- それぞれに入金機能と引き出し機能が実装されています。
- これにより、余分な作業が発生します。
ソフトウェアの変更リクエスト
ソフトウェア業界ではよくあることですが、要件仕様の変更が行われています。 当座貸越機能を備えた特権銀行口座の機能を追加する必要があります。 背景として、当座貸越は、口座内の利用可能な残高を超える金額を引き出すことができる機能です。
構造的アプローチ: 関数的アプローチを使用して、すでにテストされベースライン化されている引き出し関数を変更する必要があります。 そして、以下のようなメソッドを追加すると、新しい要件に対応できます。
OOP のアプローチ: OOP のアプローチを使用すると、withdraw 関数の独自の実装を備えた新しいクラスを作成するだけで済みます。 私たちはテストされたコード部分には決して触れませんでした。
別の変更リクエスト
要件がさらに変化したらどうなるでしょうか? 独自の入金要件を持つクレジット カード アカウントを追加したい.
構造的アプローチ: 構造的なアプローチを使用すると、テスト済みのデポジットコードを再度変更する必要があります。
OOPのアプローチ: しかし、オブジェクト指向アプローチを使用すると、deposit メソッドの独自の実装を持つ新しいクラスを作成するだけです (下の画像で赤く強調表示されています)。したがって、構造プログラミングは最初は簡単なアプローチのように見えますが、長期的には OOP が勝ちます。
OOP における継承の利点
しかし、すべてのクラスに繰り返しコードが含まれていると主張する人もいるかもしれません。
これを克服するには、親クラス「アカウント」を作成し、同じ入金と引き出しの機能を実装します。そして、子クラスに「アカウント」クラスを継承させます。こうすることで、子クラスはアカウントクラスの引き出しと入金の機能にアクセスできるようになります。これらの機能を個別に実装する必要はありません。 Javaの継承。 .