継承は、OOPS 概念の重要な機能の 1 つです。親クラスと呼ばれる 1 つのクラスの機能をその子クラスと呼ばれる別のクラスが継承することにより、コードの再利用に役立ちます。継承が 2 レベル以上に及ぶ場合、それは多レベル継承と呼ばれます。 1 つの新しいクラスが、1 つの基本クラスから派生したクラスから機能を派生する場合、それはマルチレベル継承と言われます。新しいクラスは親クラスの孫であると言われています。
広告 このカテゴリーの人気コース JAVA マスタリー - スペシャライゼーション | 78 コース シリーズ | 15 回の模擬テストたとえば、A は親、クラス B はその子、C は B の子クラス、A の孫です。同様に、A はクラス B の親クラスであり、クラス C の祖父母です。
以下に示す Java のマルチレベル継承の構文を見てみましょう。
class A{ //class A is parent of class B //class A is grand parent of class C public A(){ //A constructor } public void fun1(){ //function in Parent Class } } class B extends A{ //class B is a child class of class A //class B is a parent class of class C public B(){ //class B constructor } } class C extends B{ //class C is a child class of class B //class C is grand child class of class A public C(){ //Class C constructor } } public class Test{ public static void main(String[] args){ C obj = new C(); } }
マルチレベル継承の実装には、基本クラスが 1 つ (例: A) 存在する必要があります。次に、クラス A を拡張する派生クラス B が存在し、クラス C が A を拡張する必要があります。
マルチレベル継承は、ある派生クラスの機能を別の新しいクラスに拡張する一種です。親クラスの機能は複数のレベルまで拡張されるため、このタイプの継承はマルチレベル継承として知られています。子クラスが親クラスを拡張すると、親クラスのすべての機能を使用できます。したがって、この派生クラスの機能を拡張するクラスがある場合、それは親クラスと子クラスのすべての機能を持つ基本クラスの孫であると言われます。
クラス A を親クラス、クラス B をクラス A の子クラス、クラス C をクラス B の子クラスとします。クラス C のオブジェクトが作成されるときは、上記のように obj とします。このオブジェクトを宣言すると、クラス C のコンストラクターが呼び出されます。ご存知のとおり、子クラスのコンストラクター中に、最初にその親クラスのコンストラクターが呼び出されます。したがって、C() を呼び出すと、B() コンストラクターが呼び出され、さらに B はクラス B の子クラスであるため、A() が呼び出されます。その後、制御は子クラスに戻ります。したがって、次のシリーズでは、コンストラクターが実行されます:
A() – > B() – > C()しかし、子クラスのこのオブジェクトを使用してメソッドが呼び出されるときは、同じシグネチャを持つメソッドが子クラスに存在するかどうかが最初にチェックされます。そうでない場合、制御はメソッドを見つけるためにその親クラスに送られます。したがって、この場合、オブジェクト obj を使用して fun1() が呼び出されると、制御は C に移り、そのようなメソッドが存在しないことがわかります。したがって、制御は B に移り、したがってクラス A になります。
その理由は、メソッドのオーバーライドとして知られる、親クラスのメソッドをその子クラスで簡単に再定義できるためです。したがって、オーバーライドされたメソッドが最優先されます。このように、マルチレベル継承では、複数のレベルのクラスに継承機能が実装されます。このタイプの継承は、データ拡張、つまり既存のコードを更新せずに既存データの多様性と量を増やすプロセスを実装するときに最もよく使用されます。また、単純な変換を適用することで、利用可能なトレーニング モデルに変動性を導入するのにも役立ちます。
Java でのマルチレベル継承の例をいくつか見てみましょう。
コード:
class Electronics { public Electronics(){ System.out.println("Class Electronics"); } public void deviceType() { System.out.println("Device Type: Electronics"); } } class Television extends Electronics { public Television() { System.out.println("Class Television"); } public void category() { System.out.println("Category - Television"); } } class LED extends Television { public LED() { System.out.println("Class LED"); } public void display_tech() { System.out.println("Display Technology- LED"); } } public class Tester { public static void main(String[] arguments) { LED led = new LED(); led.deviceType(); led.category(); led.display_tech(); } }
出力:
説明: 上記の例では、クラス Electronics は、すべての電子デバイスにメソッド device_type() を提供する一般クラスです。次に、Electronics クラスを拡張するクラス Television があります。これは、Electronics デバイスを指定し、電子デバイスのタイプを表示するメソッド名 category() を持ちます。次に、クラス LED は Television クラスを拡張して、その表示に使用されるテクノロジを指定します。テクノロジーが LED であることを示すメソッド display_tech() があります。
main メソッドでは、LED クラスのオブジェクトを作成するときに、それを使用してすべての親クラスのメソッドを呼び出します。子クラスのコンストラクターを呼び出すときは、親クラスのコンストラクターが最初に呼び出されます。したがって、 new LED() が呼び出されるとき、最初に new Television() が呼び出されます。さらに、このコンストラクターでは new Electronics() が呼び出され、「Class Electronics.
」と表示されます。その後、Television コンストラクターに返されて、Class Television が表示され、次に LED クラスに返されて、Class LED が表示されます。 LED クラスのオブジェクトを使用してメソッドが呼び出される場合、最初に制御が LED クラスに移動し、メソッド (device_type()) を検索しようとします。次に、LED クラスでメソッドが見つからない場合は Television クラスに移動し、見つからない場合はメソッドを見つけます。 Television クラスでは、さらにそのスーパークラス Electronics にも移動し、そのメソッドを見つけて実行します。
マルチレベル継承は、継承の主な利点、つまりコードの再利用性と複数レベルでの読みやすさを実装するための優れた手法です。これは、基本的なトレーニング資料を提供する既存のコードに可変性と多様性を導入するのに役立ちます。この手順はコード ドキュメントと呼ばれます。
以上がJava のマルチレベル継承の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。