Javaのポリモーフィズム:概念、タイプ、特性、例
公開: 2022-04-18Javascriptは、C#、PHP、Python、C ++などとともに、最も人気があり広く使用されているオブジェクト指向プログラミング言語の1つです。すべてがオブジェクトとして表されるため、ユーザーはプログラミングを通じて実際の概念を示し、対処できます。 プログラミング言語としてのJavaの機能は、コードをより動的にし、保守を容易にすることによってソフトウェア開発を簡素化するためのいくつかの手段を提供します。
この記事では、オブジェクト指向プログラミング言語としてのJavaについて説明し、継承、抽象化、ポリモーフィズム、およびデータカプセル化の概念を理解します。 また、Javaのポリモーフィズムのタイプ、それらの長所と短所についても見ていきます。
オブジェクト指向プログラミングの概要
オブジェクト指向プログラミング(OOP)言語とは、コーディングでリアルタイムの「オブジェクト」の概念を使用するコンピューター言語を指します。 これは、プログラミングを通じて、継承、ポリモーフィズム、ループ、データ抽象化などの世俗的なエンティティを実装することを目的としています。
プログラマーが精通する必要のあるオブジェクト指向プログラミングの基本的な概念がいくつかあります。 これらの概念用語は、カプセル化、ポリモーフィズムなど、OOPの特別でユニークな機能について学習するために必要です。
1.クラス
「クラス」は、クラス内の指定されたすべての「オブジェクト」に適用される一連のプロパティとメソッドを表します。 オブジェクトは、整数、配列、文字列など、さまざまなタイプにすることができます。クラスは、ユーザーが定義したプロトタイプのようなもので、これを使用してさまざまな「オブジェクト」を作成できます。
2.オブジェクト
オブジェクトは、OOP言語の最も基本的な単位であり、実際のデータを表します。 オブジェクトには、呼び出されるクラスのプロパティがあります。
3.方法
メソッドは、特定のタスクを実行するためにまとめられたさまざまな関数を含む一連のステートメントです。 ユーザーが定義した指示を完了した後、出力を返します。 また、出力を提供しないタスクを実行することもできます。 メソッドを使用すると、プログラマーはコードを再入力せずに再利用できます。 Javaでは、C ++、C、Pythonなどの言語とは異なり、すべてのメソッドがクラスに属している必要があります。
OOPの概念
オブジェクト指向プログラミングには4つの主要な原則があります–Javaはこれらすべての特性を示します。
1.抽象化
データ抽象化はOOP言語のプロパティであり、実装コードなど、オブジェクトの他の無関係な詳細がユーザーに表示されないようにしながら、必要な詳細を表示します。 この機能では、重要で関連性のある詳細のみが表示されます。これにより、開発者はクラスの機能に適切な変更をすばやく加えることができます。
2.カプセル化
データのカプセル化とは、ユニット内でデータをラップすることです。 OOP言語のこのプロパティは、カプセル化されたデータを他の関数やメソッドから保護します。 コードと指定されたメソッドをバインドして、単一のユニットで操作を実行し、外部のメソッドによる操作やアクセスを防ぎます。 これは、データの非表示とも呼ばれます。
3.継承
継承は、クラスが他のクラスからプロパティを継承できるようにするOOP言語のもう1つの重要な機能です。 コードの再利用性の概念に基づいて機能するため、クラス機能を繰り返し再入力する必要が少なくなります。 別のクラスから継承するクラスはサブクラスと呼ばれ、継承されるクラスはスーパークラスと呼ばれます。
4.ポリモーフィズム
ポリモーフィズムにより、オブジェクトはさまざまな形式を取り、同様のタスクを実行したり、さまざまな方法で同様の動作を示したりすることができます。
Javaのポリモーフィズム
ポリモーフィズムにより、単一のタスクをさまざまな方法で実行できます。 これは、類似したコードエンティティを識別して区別するのに役立つプロパティであるため、OOP言語の効率が向上します。
Javaでは、ポリモーフィズムは、オブジェクトを個別のエンティティとして宣言することによって示されます。 このようにして、同じアクションを複数の方法で実行できます。 ポリモーフィズムは継承とともにアクティブ化され、オブジェクトがさまざまなクラスの継承されたプロパティを使用してさまざまなタスクを実行できるようにします。 メソッドまたはオブジェクトの指定の違いにより、2つのエンティティが区別されます。
世界のトップ大学からオンラインでソフトウェア開発コースを学びましょう。 エグゼクティブPGプログラム、高度な証明書プログラム、または修士プログラムを取得して、キャリアを迅速に追跡します。
多型の特徴
1.強制
コンパイル時の型エラーを防ぐためのデータ型の暗黙的な変換は強制です。 明示的なデータ型変換は含まれていませんが、Javaで許可されている変換の階層のみに従います。 たとえば、オペランドがfloatで、演算子が整数の場合、結果はafloatになります。
2.多形パラメータ/変数
実行時にさまざまなタイプの値を保持できるオブジェクトまたは変数は、ポリモーフィック変数またはパラメーターと呼ばれます。 これは、クラスを宣言するときに、同じ変数名が異なるデータ型を保持でき、同じメソッド名が異なるパラメーターと戻り型を保持できることを示しています。
3.内部演算子のオーバーロード
演算子のオーバーロードでは、ユーザーの要求に応じて演算子記号が使用されます。 Javaは内部演算子のオーバーロードをサポートしています。 これは静的ポリモーフィズムの例でもあります。
Javaのポリモーフィズムの種類
Javaでは、ポリモーフィズムは次を使用して呼び出すことができます。
1.メソッドのオーバーロード
メソッドのオーバーロードは、同じ名前を持ち、同じクラスに属する複数のオブジェクトまたはメソッドを作成するプロセスです。 クラス内で機能します。
2.メソッドのオーバーライド
メソッドのオーバーライドは、サブクラスがスーパークラスで宣言されているのと同じメソッドを構成する方法です。 クラス間で機能します。 サブクラスにスーパークラスにすでに存在する同じメソッドが含まれている場合、サブクラスの関数はオーバーライドされます。
Javaのサブタイプポリモーフィズム
サブタイプのポリモーフィズムは、アップキャスティングと遅延バインディングに依存します。
- アップキャストは、オブジェクトまたはメソッドがデータ型(浮動小数点、整数など)を継承階層の上位に移動することにより、サブタイプからスーパータイプにプロモートできるプロセスです。
- 遅延バインディングは、非最終インスタンスであるメソッドを呼び出すために使用されます。
サブタイプ自体がスーパータイプのメンバーであるため、これには演算子は関与しません。 たとえば、クラスの名前がcolorsの場合、そのサブタイプは赤、青、オレンジ、緑などになります。サブタイプのポリモーフィズムには、スーパータイプのプロパティを示すサブタイプが含まれます。 ただし、各サブタイプの個々のプロパティへのアクセスは失われます。
Javaでのランタイムポリモーフィズム
Javaでは、ランタイムポリモーフィズムは動的メソッドディスパッチまたは動的バインディングとも呼ばれます。 これは、メソッドのオーバーライドによって実現されます。オーバーライドされたメソッドを呼び出して、実行時に動的に解決されます。 これは、オブジェクトではなく関数を介して実現できます。
Javaでのランタイムポリモーフィズムの例を次に示します。
クラスカー{
void run(){System.out.println( "driving");}
}
クラスフォルクスワーゲンは車を拡張します{
void run(){System.out.println( "90kmで安全に運転する");}
public static void main(String args []){
車c=new Volkswagen();//アップキャスト
b.run();
}
}
出力:
90kmで安全運転
Javaでのコンパイル時ポリモーフィズム
コンパイル時のポリモーフィズムは、メソッドのオーバーロードによって実現されます。 これは、オーバーロードされたメソッドの呼び出しが実行され、コンパイル時に解決されるプロセスです。 静的ポリモーフィズムとしても知られています。 Javaは十分な柔軟性を備えているため、宣言と署名のプロパティが異なる限り、ユーザーは同じ名前のメソッドまたはオブジェクトを使用できます。
Javaでのコンパイル時のポリモーフィズムの例を次に示します。
クラスSimpleCalc
{{
int add(int x、int y)
{{
x+yを返します。
}
int add(int x、int y、int z)
{{
x + y+zを返します。
}
}
パブリッククラスのデモ
{{
public static void main(String args [])
{{
SimpleCalc obj = new SimpleCalc();
System.out.println(obj.add(20、30));
System.out.println(obj.add(40、30、20));
}
}
出力:
50
90
ポリモーフィズムの重要性
ポリモーフィズムは、同じ名前を持つさまざまなタイプのエンティティを構成できるメソッドの記述を可能にします。 ポリモーフィズムは、Javaのさまざまな使用上の利点と、コードを動的にするために提供される範囲のために不可欠です。
- これにより、コードの再利用が可能になります。同じコードを何度も記述する必要はありません。
- これにより、1つの変数が複数の動作を示すことができます。名前は同じですが、プロパティが異なると、コードの一貫性を維持するための範囲が広がります。
- バルクコードの削減–デバッグに役立つと同時に、コンパイル時間を短縮し、ユーザーのメモリ、エネルギー、および時間を節約します。
ポリモーフィズムの実装で考えられる問題
ポリモーフィズムは、使用と実装が混乱する可能性があります。 コードの可読性が低下するため、複数のバグやエラーの脅威が発生します。 また、必要に応じて機能を実行する際に問題が発生します。
注意すべき古典的な問題が1つあります。それは、壊れやすい基本クラスの問題です。 これは、継承されたクラスの不適切なアセンブルとコーディングを指し、その結果、メソッドが予測できない結果を示します。
結論
継承の脆弱な性質は、他のすべての基準が満たされているにもかかわらず、機能不全で壊れたコードにつながる可能性があります。 この基本的なアーキテクチャの問題は、脆弱な基本クラスの問題と見なされます。 upGradのソフトウェア開発のエグゼクティブPGプログラム–フルスタック開発の専門分野に参加して、JavaがOOPの概念をどのように示すかについて詳しく学んでください。 業界の専門家から指導を受け、仲間との実践的な共同プロジェクトに参加することで実践的な知識を構築します。
今日あなたの席を予約してください!
静的バインディングと動的バインディングとは何ですか?
コンパイル時に決定されるオブジェクトは、静的バインディングと呼ばれます。 一方、オブジェクトの動的バインディングタイプは、実行時に決定されます。 前者はメソッドのオーバーロード中に使用され、後者はメソッドのオーバーライド中に使用されます。
メソッドのオーバーライドとメソッドのオーバーロードの2つの基本的な違いは何ですか?
Javaでは、メソッドのオーバーライドはstatic、private、finalメソッドをオーバーライドしませんが、メソッドのオーバーロードはJavaのstatic、private、finalメソッドをオーバーロードします。 また、サブジェクトメソッドを動的バインディングにオーバーライドすると、オーバーロードされたメソッドは静的バインディングを通過します。
Javaのポリモーフィズムと継承の違いは何ですか?
Javaでは、ポリモーフィズムと継承の間にいくつかの違いがあります。
1.継承は、コーディングにおける実際の親子関係を表したものです。 しかし、ポリモーフィズムは、この関係を使用してプログラムをより動的にする触媒です。
2.継承により、親クラスからコードを継承することにより、子クラスからのコードの再利用が可能になります。 対照的に、ポリモーフィズムを使用すると、子クラスは親クラス内で既存の動作を再定義できます。