logo

Java での継承

  1. 継承
  2. 相続の種類
  3. Javaではクラスの場合に多重継承ができないのはなぜですか?

Java での継承 1 つのオブジェクトが親オブジェクトのすべてのプロパティと動作を取得するメカニズムです。それは重要な部分です おっと (オブジェクト指向プログラミング システム)。

Java の継承の背後にある考え方は、新しいものを作成できるということです。 クラス 既存のクラスに基づいて構築されています。既存のクラスから継承する場合、親クラスのメソッドとフィールドを再利用できます。さらに、現在のクラスに新しいメソッドとフィールドを追加することもできます。

継承が表すのは、 IS-A関係 としても知られています 親子 関係。

文字列.format Java

Javaで継承を使用する理由

相続で使用される用語

    クラス:クラスは、共通のプロパティを持つオブジェクトのグループです。これは、オブジェクトの作成元となるテンプレートまたはブループリントです。サブクラス/子クラス:サブクラスとは、他のクラスを継承するクラスです。派生クラス、拡張クラス、子クラスとも呼ばれます。スーパークラス/親クラス:スーパークラスは、サブクラスが機能を継承する元のクラスです。基本クラスまたは親クラスとも呼ばれます。再利用性:名前が示すように、再利用性は、新しいクラスを作成するときに既存のクラスのフィールドとメソッドを再利用しやすくするメカニズムです。前のクラスですでに定義されているのと同じフィールドとメソッドを使用できます。

Java継承の構文

 class Subclass-name extends Superclass-name { //methods and fields } 

キーワードを拡張します 既存のクラスから派生する新しいクラスを作成していることを示します。 「拡張」の意味は機能を増やすことです。

Javaの用語では、継承されるクラスを親クラスまたはスーパークラスと呼び、新しいクラスを子クラスまたはサブクラスと呼びます。


Java 継承の例

Java での継承

上の図に示されているように、Programmer はサブクラスであり、Employee はスーパークラスです。 2 つのクラス間の関係は次のとおりです。 プログラマー IS-A 社員 。プログラマーは従業員の一種であることを意味します。

 class Employee{ float salary=40000; } class Programmer extends Employee{ int bonus=10000; public static void main(String args[]){ Programmer p=new Programmer(); System.out.println('Programmer salary is:'+p.salary); System.out.println('Bonus of Programmer is:'+p.bonus); } } 
今すぐテストしてください
 Programmer salary is:40000.0 Bonus of programmer is:10000 

上記の例では、Programmer オブジェクトは、Employee クラスだけでなく自身のクラスのフィールドにもアクセスできます。つまり、コードの再利用が可能です。


Javaの継承の種類

クラスに基づいて、Java には単一、マルチレベル、階層の 3 つのタイプの継承があります。

文字列を整数に変換

Java プログラミングでは、複数のハイブリッド継承はインターフェイスを通じてのみサポートされます。インターフェースについては後で学びます。

Java の継承の種類

注: Java ではクラスを介した多重継承はサポートされていません。

1 つのクラスが複数のクラスを継承することを、多重継承と呼びます。例えば:

Javaの多重継承

単一継承の例

クラスが別のクラスを継承することは、 単一継承 。以下の例では、Dog クラスが Animal クラスを継承しているため、単一の継承が存在します。

ファイル: TestInheritance.java

 class Animal{ void eat(){System.out.println('eating...');} } class Dog extends Animal{ void bark(){System.out.println('barking...');} } class TestInheritance{ public static void main(String args[]){ Dog d=new Dog(); d.bark(); d.eat(); }} 

出力:

 barking... eating... 

マルチレベル継承の例

継承の連鎖がある場合、それは次のように呼ばれます。 マルチレベルの継承 。以下の例でわかるように、BabyDog クラスは Dog クラスを継承し、Dog クラスは再度 Animal クラスを継承するため、複数レベルの継承が存在します。

ファイル: TestInheritance2.java

 class Animal{ void eat(){System.out.println('eating...');} } class Dog extends Animal{ void bark(){System.out.println('barking...');} } class BabyDog extends Dog{ void weep(){System.out.println('weeping...');} } class TestInheritance2{ public static void main(String args[]){ BabyDog d=new BabyDog(); d.weep(); d.bark(); d.eat(); }} 

出力:

 weeping... barking... eating... 

階層的な継承の例

2 つ以上のクラスが 1 つのクラスを継承することを、 階層継承 。以下の例では、Dog クラスと Cat クラスが Animal クラスを継承しているため、階層的な継承が存在します。

ファイル: TestInheritance3.java

ボーン・アゲイン シェル
 class Animal{ void eat(){System.out.println('eating...');} } class Dog extends Animal{ void bark(){System.out.println('barking...');} } class Cat extends Animal{ void meow(){System.out.println('meowing...');} } class TestInheritance3{ public static void main(String args[]){ Cat c=new Cat(); c.meow(); c.eat(); //c.bark();//C.T.Error }} 

出力:

 meowing... eating... 

Q) Java では多重継承がサポートされていないのはなぜですか?

複雑さを軽減して言語を簡素化するために、Java では多重継承はサポートされていません。

A、B、C が 3 つのクラスであるシナリオを考えてみましょう。 C クラスは A クラスと B クラスを継承します。 A クラスと B クラスが同じメソッドを持ち、それを子クラスのオブジェクトから呼び出すと、A クラスのメソッドを呼び出すのか、B クラスのメソッドを呼び出すのかが曖昧になります。

コンパイル時エラーは実行時エラーよりも優れているため、2 つのクラスを継承すると Java はコンパイル時エラーを返します。したがって、同じメソッドを使用しても、異なるメソッドを使用しても、コンパイル時にエラーが発生します。

 class A{ void msg(){System.out.println('Hello');} } class B{ void msg(){System.out.println('Welcome');} } class C extends A,B{//suppose if it were public static void main(String args[]){ C obj=new C(); obj.msg();//Now which msg() method would be invoked? } } 
今すぐテストしてください
 Compile Time Error