継承 はオブジェクト指向プログラミングの最も強力な機能です。これにより、あるクラスのプロパティを別のクラスに継承できます。このセクションでは、次のことについて説明します。 Javaの継承の種類 実際の例を使って詳しく説明します。また、さまざまなタイプの継承の概念を実装する Java プログラムを作成します。
継承
継承 既存のクラスから新しいクラスを駆動するメカニズムです。既存の (古い) クラスは次のように呼ばれます。 基本クラス または スーパークラス または 親クラス 。新しいクラスはとして知られています 派生クラス または サブクラス または 子クラス 。これにより、あるクラス (親) のプロパティと動作を別のクラス (子) で使用できるようになります。
プロパティが継承されるクラスは次のように呼ばれます。 親クラス 親クラスのプロパティを継承するクラスは、 子クラス 。したがって、親子クラスまたは子クラスと呼ばれる親クラスと子クラスの間に関係が確立されます。 です 関係。
整数文字列
次の名前の 2 つのクラスがあるとします。 父親 そして 子供 そして、Father クラスのプロパティを Child クラスに継承したいと考えています。これを実現するには、 伸びる キーワード。
//inherits the properties of the Father class class Child extends Father { //functionality }
継承を使用する必要があるのはどのような場合ですか?
継承により提供されるのは、 再利用性 特に再利用するコードが大規模な場合は、コードの量が減少します。また、「」として知られる異なるクラス間の関係も確立します。 です 関係。達成したい場合にも使用できます メソッドのオーバーライド 。
留意事項
- Javaではコンストラクタを継承できません。
- プライベートメンバーは Java では継承されません。
- Java では循環継承は許可されません。
- 親参照を子オブジェクトに割り当てます。
- コンストラクター内に super() が存在するため、コンストラクターが実行されます。
相続の種類
Java は、次の 4 種類の継承をサポートしています。
- 単一の継承
- マルチレベルの継承
- 階層的な継承
- ハイブリッド継承
注: 多重継承は Java ではサポートされていません。
それぞれについて適切な例を挙げて説明しましょう。
単一の継承
単一継承では、サブクラスは 1 つのスーパークラスのみから派生します。これは、単一親クラスのプロパティと動作を継承します。として知られることもあります 単純な継承 。
上の図では、Employee が親クラス、Executive が子クラスです。 Executive クラスは、Employee クラスのすべてのプロパティを継承します。
Java プログラムに単一継承メカニズムを実装してみましょう。
エグゼクティブ.java
class Employee { float salary=34534*12; } public class Executive extends Employee { float bonus=3000*6; public static void main(String args[]) { Executive obj=new Executive(); System.out.println('Total salary credited: '+obj.salary); System.out.println('Bonus of six months: '+obj.bonus); } }
出力:
パブリック Java とプライベート Java
Total salary credited: 414408.0 Bonus of six months: 18000.0
マルチレベルの継承
で マルチレベルの継承 、クラスが別のクラスから派生したクラスから派生することを、マルチレベル継承と呼びます。簡単に言うと、複数の親クラスを持つクラスを多レベル継承と呼ぶことができます。クラスは異なるレベルである必要があることに注意してください。したがって、単一の基本クラスと単一の派生クラスが存在しますが、複数の中間基本クラスが存在します。
上の図では、Marks クラスは Student クラスのメンバーまたはメソッドを継承しています。 Sports クラスは、Marks クラスのメンバーを継承します。したがって、Student クラスはクラス Marks の親クラスであり、クラス Marks はクラス Sports の親クラスです。したがって、クラス Sports はクラス Marks とともに Student のプロパティを暗黙的に継承します。
Java プログラムにマルチレベル継承メカニズムを実装してみましょう。
MultilevelInheritanceExample.java
123moviesに似た映画ウェブサイト
//super class class Student { int reg_no; void getNo(int no) { reg_no=no; } void putNo() { System.out.println('registration number= '+reg_no); } } //intermediate sub class class Marks extends Student { float marks; void getMarks(float m) { marks=m; } void putMarks() { System.out.println('marks= '+marks); } } //derived class class Sports extends Marks { float score; void getScore(float scr) { score=scr; } void putScore() { System.out.println('score= '+score); } } public class MultilevelInheritanceExample { public static void main(String args[]) { Sports ob=new Sports(); ob.getNo(0987); ob.putNo(); ob.getMarks(78); ob.putMarks(); ob.getScore(68.7); ob.putScore(); } }
出力:
registration number= 0987 marks= 78.0 score= 68.7
階層的な継承
多数のクラスが単一の基本クラスから派生する場合、それは次のように呼ばれます。 階層継承 。
上の図では、Science、Commerce、および Arts のクラスが Student という名前の単一の親クラスを継承しています。
Java プログラムに階層継承メカニズムを実装してみましょう。
HierarchicalInheritanceExample.java
それ以外の場合 Java
//parent class class Student { public void methodStudent() { System.out.println('The method of the class Student invoked.'); } } class Science extends Student { public void methodScience() { System.out.println('The method of the class Science invoked.'); } } class Commerce extends Student { public void methodCommerce() { System.out.println('The method of the class Commerce invoked.'); } } class Arts extends Student { public void methodArts() { System.out.println('The method of the class Arts invoked.'); } } public class HierarchicalInheritanceExample { public static void main(String args[]) { Science sci = new Science(); Commerce comm = new Commerce(); Arts art = new Arts(); //all the sub classes can access the method of super class sci.methodStudent(); comm.methodStudent(); art.methodStudent(); } }
出力:
The method of the class Student invoked. The method of the class Student invoked. The method of the class Student invoked.
ハイブリッド継承
ハイブリッドとは、複数の要素から構成されることを意味します。ハイブリッド継承は、2 つ以上のタイプの継承を組み合わせたものです。
上の図では、祖父がスーパークラスです。 Father クラスは GrandFather クラスのプロパティを継承します。父と祖父は単一相続を表すため。さらに、Father クラスは Son および Daughter クラスに継承されます。したがって、父親は息子と娘の親クラスになります。これらのクラスは階層的な継承を表します。これらを組み合わせると、ハイブリッド継承を意味します。
Java プログラムにハイブリッド継承メカニズムを実装してみましょう。
娘.java
Javaの静的関数
//parent class class GrandFather { public void show() { System.out.println('I am grandfather.'); } } //inherits GrandFather properties class Father extends GrandFather { public void show() { System.out.println('I am father.'); } } //inherits Father properties class Son extends Father { public void show() { System.out.println('I am son.'); } } //inherits Father properties public class Daughter extends Father { public void show() { System.out.println('I am a daughter.'); } public static void main(String args[]) { Daughter obj = new Daughter(); obj.show(); } }
出力:
I am daughter.
多重継承 (サポートされていません)
Java はあいまいさのため、多重継承をサポートしていません。たとえば、次の Java プログラムについて考えてみましょう。
デモ.java
class Wishes { void message() { System.out.println('Best of Luck!!'); } } class Birthday { void message() { System.out.println('Happy Birthday!!'); } } public class Demo extends Wishes, Birthday //considering a scenario { public static void main(String args[]) { Demo obj=new Demo(); //can't decide which classes' message() method will be invoked obj.message(); } }
上記のコードでは、コンパイラがどの message() メソッドを呼び出すかを決定できないため、エラーが発生します。この理由により、Java はクラス レベルでの多重継承をサポートしていませんが、 インターフェース 。