ホームページ > Java > &#&ベース > Javaのポリモーフィズムの原理は何ですか

Javaのポリモーフィズムの原理は何ですか

王林
リリース: 2020-01-02 10:12:20
オリジナル
4770 人が閲覧しました

Javaのポリモーフィズムの原理は何ですか

#ポリモーフィズムとは何ですか?

ポリモーフィズムとは、参照変数がどのクラス インスタンス オブジェクトを指すかを指します。参照変数によって発行されるメソッド呼び出しは、どのクラスに実装されるメソッドです。これは、プログラムの実行中に決定する必要があります。 。

特定のクラスはプログラムの実行時に決定されるため、ソース プログラム コードを変更せずに参照変数をさまざまなクラス実装にバインドでき、その結果、参照によって呼び出される特定のメソッドが変更されます。この変更は、次のことを意味します。実行時にプログラムにバインドされている特定のコードは、プログラム コードを変更せずに変更できるため、プログラムは複数の実行状態を選択できます。これがポリモーフィズムです。

(無料のオンライン学習ビデオ チュートリアルの共有:

java online learning)

機能:

は、次の親クラスを指します。サブクラス 参照は上方変換されるため、親クラスが所有するメソッドとプロパティにのみアクセスできます。サブクラスに存在するが親クラスに存在しないメソッドについては、メソッドがオーバーロードされていても参照は使用できません。

サブクラスが親クラスの一部のメソッドをオーバーライドする場合、これらのメソッドを呼び出すときは、サブクラスで定義されたメソッドを使用する必要があります (動的接続、動的呼び出し)。

Java がポリモーフィズムを実現するには、継承、書き換え、上方変換という 3 つの条件が必要です。

呼び出される優先度メソッド、優先度は次のとおりです: this.show(O)、super.show(O)、this.show((super)O)、super.show((super )O )。

ポリモーフィズムの実装原理

Java におけるオブジェクト メソッドの呼び出しは、クラス情報内のメソッド テーブルに依存して実装されます。

一般に、オブジェクトのメソッドが呼び出されるとき、JVM はオブジェクト クラスのメソッド テーブルを検索してメソッドの直接参照アドレスを決定し、アドレスを取得した後でのみ実際にメソッドを呼び出します。 。

スーパー クラスは親クラスのメソッドを継承します。メソッドがオーバーライドされていない場合、呼び出しは親クラスのメソッドを指します。このメソッドをオーバーライドすると、クラスのコード領域を指しますが、スーパークラスは親クラスのメソッドテーブルを持つことになります。

Java プログラムの実行中、クラス関連の情報がメソッド領域に配置されることはわかっています。この情報の中には、メソッド テーブルと呼ばれる領域があります。このテーブルには、型とメソッドによって定義されたすべてのメソッドに関する情報が含まれています。これらへのポインタ メソッドの実際のコードへのポインタ。

図に示すように:


Javaのポリモーフィズムの原理は何ですか

Bird、Cock、Parrot、および CrazyParrot の 4 つのクラスがメソッド領域に読み込まれると、 Java 仮想マシンのメソッド領域には、これら 4 つのクラスに関する情報が含まれています。次の図は、各クラスのメソッド テーブルの例を示しています。

Javaのポリモーフィズムの原理は何ですか

図から、Cock、Parrot、および CrazyParrot のクラス情報メソッド テーブルに Bird から継承されたメソッドが含まれていることがわかります。 CrazyParrot のメソッド テーブルには、Parrot から継承されたメソッドが含まれています。さらに、各クラスには独自のメソッドもあります。

メソッド テーブル エントリが指す特定のメソッド コード領域に注意してください。ポリモーフィックなオーバーライド メソッド courtship() の場合、Cock、Parrot、および CrazyParrot のメソッド テーブル内の courtship() エントリの場所は Bird メソッド テーブルから継承された部分に属しますが、別のメソッド コード領域を指します。

関連記事チュートリアルの共有:

Java 言語の紹介

以上がJavaのポリモーフィズムの原理は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート