Java での継承 1 つのオブジェクトが親オブジェクトのすべてのプロパティと動作を取得するメカニズムです。それは重要な部分です おっと (オブジェクト指向プログラミング システム)。
Java の継承の背後にある考え方は、新しいものを作成できるということです。 クラス 既存のクラスに基づいて構築されています。既存のクラスから継承する場合、親クラスのメソッドとフィールドを再利用できます。さらに、現在のクラスに新しいメソッドとフィールドを追加することもできます。
継承が表すのは、 IS-A関係 としても知られています 親子 関係。
文字列.format Java
Javaで継承を使用する理由
- のために メソッドのオーバーライド (それで ランタイムポリモーフィズム 達成することができます)。
- コードの再利用性のため。
相続で使用される用語
Java継承の構文
class Subclass-name extends Superclass-name { //methods and fields }
の キーワードを拡張します 既存のクラスから派生する新しいクラスを作成していることを示します。 「拡張」の意味は機能を増やすことです。
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 ではクラスを介した多重継承はサポートされていません。
1 つのクラスが複数のクラスを継承することを、多重継承と呼びます。例えば:
単一継承の例
クラスが別のクラスを継承することは、 単一継承 。以下の例では、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