what is inheritance java tutorial with examples
このチュートリアルでは、Javaでの継承の概念、「extends」や「super」キーワード、サブクラス、スーパークラス、Is-A、HAS-A関係などの関連用語について説明します。
OOPの3つの柱、つまりJavaの抽象化、カプセル化、ポリモーフィズムについて学習した後、OOPの最後の柱である継承に到達します。
このチュートリアルから始めて、次のいくつかのチュートリアルでJavaの継承について説明します。
=> EasyJavaトレーニングシリーズをお読みください。
学習内容:
Javaでの継承
Javaでの継承は、クラスの1つのオブジェクトが別のオブジェクトの動作とプロパティを取得する手法またはプロセスとして定義できます。これは、クラスを継承するか、2つのクラス間の関係を確立することによって行われます。
例えば、 カエルは両生類です。両生類クラスの他の動物のように、カエルは他の動物に共通する多くの特徴を持っているかもしれません。つまり、ここでは両生類が種であり、カエルのような動物がそのメンバーです。
OOPを使用してソフトウェア表現で両生類の種とそのメンバーを表現する必要がある場合は、一般的な両生類に共通のプロパティまたは動作を含むクラス「Amphibian」を開発します。
このようにして、説明するすべての両生類の動物に共通の特性と行動を複製する必要はありません。以下に示すように、両生類の動物用のクラスを直接作成し、両生類のクラスを継承します。
したがって、「継承」機能の背後にある一般的な考え方は、既存のクラスから継承することで新しいクラスを作成できるということです。既存のクラスから継承することで、これらのクラスのプロパティと動作を使用できるようになります。さらに、新しいクラスにプロパティや動作を追加できます。
継承機能は、「 親子 」Javaでの接続または関係。新しいクラスが継承されるクラスは、「 親クラス 」、新しいクラスは「 子クラス 」。
継承は主に使用されます:
- ために メソッドのオーバーライド 私たちが達成できるように ランタイムポリモーフィズム 。
- に コードを再利用する 。既存のクラスから継承することにより、 再利用性 コードの。
継承で使用される一般的な用語
- 再利用性: 新しいクラスが既存のクラスのフィールドまたはプロパティとメソッドを再利用するメカニズム。
- クラス: クラスは、共通のプロパティを持つオブジェクトのコレクションです。クラスは、オブジェクトのテンプレートまたは青写真として表示できます。
- サブクラス/子クラス: 別のクラスから継承するクラスは、サブクラス、子クラス、または派生クラスです。
- スーパークラス/親クラス: プロパティとメソッドを取得するために別のクラスに継承されるクラスは、親クラス、スーパークラス、または基本クラスと呼ばれます。
次の継承階層は、スーパークラスとサブクラスを示す例です。
OrganisationNameフィールドとEmployeeIdフィールドを持つEmployeeクラスがあります。また、従業員名、部門、その他の従業員の詳細などの他のフィールドを含めることもできます。
次に、フィールドの給与と特典を使用して、「SoftwareDeveloper」という名前の別のクラスを派生させます。 SoftwareDeveloperクラスはEmployeeクラスを継承しているため、Employeeクラスのプロパティも取得します。
上の図に示されているように、ここではEmployeeクラスはSuperクラスまたはBaseクラスであり、SoftwareDeveloperはサブクラスまたは派生クラスです。
Javaで「extends」キーワード
Javaでは、キーワード「extends」を使用してクラスを継承します。
Java継承の一般的な構文を以下に示します。
class SubClass extends SuperClass { //subclass methods and fields }
上に示したように、「extends」キーワードは、クラス宣言構文のクラス名の後に表示されます。
キーワード「extends」は、「SuperClass」からプロパティと動作を継承する新しいクラス「SubClass」を作成していることを示しています。つまり、extendsキーワードは、SuperClassの既存の機能に基づいて新しいクラスSubClassを構築していることを示します。
「extends」キーワードで実装された継承は、クラス継承です。次のチュートリアルでは、インターフェースを継承できる別のキーワード「実装」について説明します。
上で説明したEmployee-SoftwareDeveloperクラスの例は、次のように表すことができます。
class Employee{ String OrganizationName; int EmployeeId; } class SoftwareDeveloper extends Employee{ float Salary; float Perks; }
IS-AとHAS-Aの関係
次のクラス構造を検討してください。
class Mammal{ } class Cow extends Mammal{ }
では、上記の構造をどのように解釈できるでしょうか。牛のクラスは哺乳類を拡張または継承するため、「牛」と言うことができます。 IS A 哺乳類」または「牛 一種です 哺乳類'。したがって、そのような関係を表現するときはいつでも、その特定の関係は「IS_A」関係です。
上記の構造では、継承階層を使用して、ある種類が別の種類であるという事実を表現しました。したがって、上記の構造では、継承を使用して、牛と哺乳類の関係を示しています。
同様に、IS-A関係を次のように表現できます。
上記の例は、Javaで継承を使用して表現できる関係の一般的な例の一部です。
一般に、IS-Aの一種の関係は、継承を使用して表現できます。
次に、以下の例を見てみましょう。
上の図では、車両がエンジンとブレーキの2つの部分で構成されていることがわかります。では、このシナリオをどのように言葉で表現できるでしょうか。
「車両 含まれています エンジンと車両 含まれています ブレーキ」。
したがって、ここで表現しているのは、「IS-A」関係ではなく、あるオブジェクトを別のオブジェクトの一部として指定する封じ込め関係です。
ソフトウェア開発ライフサイクルにおけるウォーターフォールモデル
上記の例では、エンジンは の一部 車両。それは「 やや 」車両。これは ' があります 」またはJavaでの包含または構成の関係。 JavaのHas-a関係は、クラスのメンバーとしてオブジェクトを含めることによって表現されます。
したがって、上記と同じ車両の例に従うと、次のように表現できます。
class Engine{ } class Brake { } class Vehicle{ Engine e; Brake b; }
つまり、車両にはエンジンとブレーキがあります。上記のように関係を表現することにより、エンジンやブレーキの内部実装には関心がありません。車両クラスは、エンジンクラスとブレーキクラスに何が必要かを知らせ、それらのクラスがそれを提供します。
IS-A関係と同様に、HAS-A関係もコードの再利用に役立ちます。
このチュートリアルでは、継承(IS-A)について詳しく説明し、次のチュートリアルでは、包含または構成(HAS-A)について説明します。
Java継承の例
継承を示すために、Javaで簡単な例を実装してみましょう。
//example class demonstrating Inheritance in Java class BaseClass { public void display() { System.out.println('BaseClass::Display'); } } //create a new class from BaseClass class DerivedClass extends BaseClass { public void print() { System.out.println('DerivedClass::print'); } } class Main { public static void main(String() args) { //create an object of DerivedClass DerivedClass d1 = new DerivedClass(); d1.display(); //call BaseClass method d1.print(); //call DerivedClass method } }
出力:
上記のプログラムは、継承の簡単な例を示しています。 1つのメソッドを持つBaseClassが宣言されます。次に、BaseClassを拡張する別のクラスDerivedClassが宣言されます。このクラスにも1つのメソッドがあります。
プログラムのmainメソッドで、DerivedClassオブジェクトを作成し、このオブジェクトを使用して、BaseClassメソッドとDerivedClassメソッドを呼び出します。
出力には、両方の方法で印刷されたメッセージが表示されます。 DerivedClassはBaseClassを拡張し、BaseClassメソッドはパブリックであるため、DerivedClassに表示されます。
Javaの「スーパー」キーワード
継承では、スーパークラスまたは親クラスと子クラスを扱います。変数、メソッド、コンストラクターなどのスーパークラスメンバーに中間的にアクセスする必要がある場合は、何らかのメカニズムが必要です。基本クラスのメンバーにアクセスするこのメカニズムは、「super」キーワードを使用してJavaで提供されます。
では、Javaで「super」キーワードを使用するシナリオはどれですか。
以下に、「super」キーワードが役立つシナリオを示します。
- スーパー/ベースクラスとサブ/派生クラスのメンバーの名前が同じで、スーパークラスメンバーにアクセスする場合は、superキーワードを使用します。
- サブクラスからスーパークラスコンストラクターにアクセスする場合は、superキーワードを使用してsuperclassキーワードを呼び出します。
上の図では、継承構造を示しています。基本クラスと派生クラスには、文字列変数myStrがあります。派生クラスには、printStr()関数があります。このメソッドでは、「super」キーワードを使用して、基本クラスからmyStr変数にアクセスしました。
この図では、基本クラスのメンバー変数と派生クラス変数を指す矢印を示しています。
次に、superキーワードを使用してさまざまなスーパークラスメンバーにアクセスするプログラミング例を見てみましょう。
#1)スーパークラスメンバー変数にアクセスする
次のJavaプログラムは、「super」キーワードを使用して基本クラスの変数にアクセスする方法を示しています。
class Baseclass { String myStr; } class Subclass extends Baseclass { String myStr; public void printdetails() //Baseclass and Subclass have variables with same name { super.myStr = 'Super'; //refers to parent class member myStr = 'Sub'; System.out.println('Superclass myStr :' + super.myStr+' and Subclass myStr:'+myStr); } } class Main{ public static void main(String() args) { Subclass cobj = new Subclass(); cobj. printdetails (); } }
出力:
上記のプログラムは、メンバー変数が基本クラスと派生クラスの両方で同じ名前で宣言されている場合に、派生クラスから基本クラスのメンバー変数にアクセスする方法を示しています。
配列の個々の要素がメソッドに渡されるとき:
ここには、基本クラスと派生クラスで宣言されているmyStr変数があります。メソッドprintdetailsでは、「super.myStr」を使用して基本クラスのmyStr変数を参照しますが、派生クラス変数myStrには修飾子なしで直接アクセスします。
#2)スーパークラスメソッドにアクセスする
次に、基本クラスのメソッドと派生クラスのメソッドの名前が同じ場合に、基本クラスのメソッドを呼び出す方法を説明します。
次のプログラムはこれを示しています。
class Parent { String myStr; public void print() //parent class method { myStr = 'Parent class myStr'; System.out.println(myStr); } } class Child extends Parent { String myStr; public void print() //child class method with same name as parent { super.print(); //call Parent class print() method myStr = 'Child class myStr'; System.out.println(myStr); } } class Main{ public static void main(String() args) { Child c_obj = new Child(); c_obj.print (); } }
出力:
#3)スーパークラスコンストラクターにアクセスする
あるクラスを別のクラスから継承する場合、コンストラクターは継承されないことに注意してください。
派生クラスコンストラクターを実行する前にスーパークラスコンストラクターからの命令を実行する場合は、「super」キーワードを使用してスーパークラスコンストラクターを呼び出すこともできます。
スーパークラスコンストラクターを呼び出すために、メソッド呼び出しを使用します。
スーパー(パラメータリスト…)
次のメソッドは、Javaのスーパーコンストラクターへのアクセスを示しています。
class Parent { String myStr; public Parent(String name) //base class constructor { myStr = name; } } class Child extends Parent { String myStr; public Child(String name1, String name2) { super(name1); //call base class constructor and pass argument value this.myStr = name2; } public void printDetails() //print details of both constructors { System.out.println('From base class constructor: ' +super.myStr); System.out.println('From derived class constructor: ' + myStr); } } class Main{ public static void main(String() args) { Child cobj = new Child('Super constructor string','Child constructor string'); cobj.printDetails(); } }
出力:
上記のプログラムからわかるように、派生クラスのコンストラクターからスーパークラスのコンストラクターを呼び出しました。慣例により、スーパークラスコンストラクターにアクセスする場合は常に、派生クラスのコンストラクターの最初のステートメントである必要があることに注意してください。
基本クラスにはパラメーター化されたコンストラクターがあるため、コンストラクターの呼び出し中に適切なパラメーターをスーパー呼び出しに渡します。
上記のようにスーパーコンストラクターに対して明示的な呼び出しが行われない場合、コンパイラーは常にsuper()への暗黙的な呼び出しを自動的に追加します。ただし、これはスーパークラスのデフォルトコンストラクターの呼び出しになることに注意してください。
よくある質問
Q#1)Javaの継承とは何ですか?
回答: あるクラスが別のクラスのプロパティと動作を取得するプロセスは、継承と呼ばれます。 Javaでは、「extends」キーワードを使用して、あるクラスが別のクラスに継承されます。
継承により、コードの再利用性が促進されます。継承することで、重複するコードを記述しなくても、継承されたクラスの既存のプロパティと動作を取得して使用できます。
Q#2)Javaで継承が使用されるのはなぜですか?
回答: 継承は、主にアプリケーションの再利用性を向上させるために使用されます。継承を使用すると、アプリケーションでreadyクラスを使用できます。機能の準備ができていれば、コードを書く必要はありません。
継承の2番目の使用法は、メソッドのオーバーライドです。ランタイムポリモーフィズムを実装するために、継承を利用します。
Q#3)継承の利点は何ですか?
回答: 再利用性は、継承の主な利点です。継承を通じてコードを共有すると、コードの可読性と編成も向上します。
継承を使用してメソッドをオーバーライドすることで、ランタイムポリモーフィズムを実現することもできます。
Q#4)継承の特徴は何ですか?
回答: 古い世代から取得した特性や機能はすべて、継承によって行われます。 例えば、 多くの家族で発生する光の目の特性は、継承の例です。
プログラミングの観点から、継承は再利用性とメソッドのオーバーライドの機能を提供します。
Q#5)スーパー()は必要ですか?
回答: いいえ。super()を呼び出さない場合、コンパイラは暗黙的に呼び出します。ただし、super()の暗黙的な呼び出しは、デフォルトの基本クラスコンストラクターです。したがって、基本クラスからパラメーター化されたコンストラクターが必要な場合は、それを明示的に呼び出す必要があります。
結論
このチュートリアルでは、Javaでの継承の概念を紹介しました。継承は、あるクラスのプロパティと動作を別のクラスで取得するプロセスです。ここでは、継承で使用する基本的な定義と用語について説明しました。
また、JavaでのIs-AとHas-Aの関係についても説明しました。継承は、Is-A関係を実装するために使用されます。
次に、継承に関連して使用されるJavaの「extends」および「super」キーワードについて説明しました。 Extendsは、継承を実装するために使用されます。 superキーワードは、派生クラスの基本クラスコンストラクター、メソッド、または変数を参照するために使用されます。
=> ここで完璧なJavaトレーニングガイドをチェックしてください。