Java の早期バインディングと遅延バインディングの違い

WBOY
リリース: 2023-09-14 08:57:15
転載
996 人が閲覧しました

Java の早期バインディングと遅延バインディングの違い

#オブジェクト指向プログラミングにおいて、ストラテジ呼び出しとその実行を結び付けるメソッド。 Java は、初期権限と後期権限 (それぞれ非アクティブ権限およびアクティブ権限として知られる) をサポートするオブジェクト指向プログラミング言語です。どちらのバインディング形式にも利点と用途があります。この記事では、Java のアーリー バインディングとレイト バインディングの構文、説明、違いを紹介します。

###文法###

Java の早期バインディングの構文は次のとおりです。

リーリー

Java の遅延バインディングの構文は次のとおりです。

リーリー

用語の説明

クラスの型は早期バインディング中のコンパイル時に決定され、メソッドの実装は指定されたオブジェクトの型に基づいて選択されます。これは、コンパイラがオブジェクトの特定のクラスを認識し、メソッド呼び出しをメソッド実装に直接結び付けることができることを意味します。

一方、遅延バインディングは、実行時にクラスの型を決定し、オブジェクトの実際の型に基づいてメソッド実装を選択します。これは、コンパイラがオブジェクトの正確なクラスを認識しておらず、正しいメソッド実装を見つけるためにランタイム環境に依存する必要があることを示しています。

方法 1: 早期バインディング

早期バインディングでは、メソッド呼び出しはコンパイル時に解決されます。次の早期バインディング アルゴリズムを考えてみましょう -

Shape という名前のクラスを宣言し、draw() という名前のメソッドを使用します。
  • Circle という名前のサブクラスを作成して、Shape クラスを拡張します。
  • draw() メソッドを Circle クラスに実装します。
  • 早期バインディングを使用して、Circle クラスのオブジェクトを作成します。
  • オブジェクトのdraw()メソッドを呼び出します。
  • ###例### リーリー ###出力### リーリー

    メソッド 1 のコードの説明
このコードには、「描画シェイプ」を出力するdraw()関数を備えたShapeクラスがあります。また、Shape クラスを拡張し、draw() 関数をオーバーライドして「円を描画」を出力する Circle クラスもあります。 Mainクラスでは、Shape型として宣言し、アーリーバインディングを利用してCircleクラスのオブジェクトを作成しました。シェイプオブジェクトのdraw()関数を呼び出すと、結果は「円を描く」になります。これは、メソッド呼び出しがビルド時に Circle クラスの実装に関連付けられるためです。

方法 2: 遅延バインディング

遅延バインディングでは、メソッド呼び出しは実行時に解決されます。次の遅延バインディング アルゴリズムを考えてみましょう -

Animal という名前のクラスを宣言し、makeSound() という名前のメソッドを使用します。

Dog と Cat という名前の 2 つのサブクラスを作成して、Animal クラスを拡張します。
  • Dog クラスと Cat クラスに makeSound() メソッドを実装します。
  • 遅延バインディングを使用して Dog クラスのオブジェクトを作成します。
  • オブジェクトの makeSound() メソッドを呼び出します。
  • ###例### リーリー ###出力### リーリー

    メソッド 2 のコードの説明
  • このコードには、「動物が音を取得します」を出力する makeSound() メソッドを持つ Animal クラスがあります。また、Dog と Cat という 2 つのサブクラスもあり、Animal クラスを拡張し、makeSound() メソッドをオーバーライドして、それぞれ「犬の鳴き声」と「猫の鳴き声」を出力します。 Mainクラスでは遅延バインディングを使用してDogクラスのオブジェクトを作成し、Animal型として宣言しました。動物オブジェクトで makeSound() メソッドを呼び出すと、出力は「犬の鳴き声」になります。これは、メソッド呼び出しが、オブジェクトの実際の型に基づいて実行時に Dog クラスの実装にバインドされるためです。

    Java の早期バインディングと遅延バインディングの違い

相違点

早期バインディング

遅延バインディング ######パフォーマンス######

解析時間

コンパイル時間

######ランタイム######
メソッドの実装

宣言されたオブジェクトの型に基づいて決定されます

オブジェクトの実際のタイプに基づいて決定します

柔軟性

メソッドの実装を動的に変更する際の柔軟性の制限

動的なメソッドディスパッチとポリモーフィズムを通じて柔軟性を提供します

メソッド呼び出しがコンパイル時に解決されるため、パフォーマンスが向上します。

メソッド呼び出しは実行時に解析されるため、パフォーマンスがわずかに遅くなります

オブジェクト宣言
オブジェクト宣言はクラス型を使用します

オブジェクト宣言は派生クラス型を使用します

###結論は###

早期バインディングと遅延バインディングは Java の 2 つの重要な概念であり、メソッド呼び出しの解析方法を決定します。遅延バインディングは実行時のオブジェクトの実際の型に基づいてメソッド呼び出しを解決しますが、早期バインディングはコンパイル時にメソッド呼び出しをその実装にリンクします。各方法には独自の利点と用途があります。早期バインディングはメソッド呼び出しがコンパイル時に解決されるため、パフォーマンスが向上しますが、メソッド実装を動的に変更することはできません。一方、遅延バインディングでは、動的なメソッドのディスパッチが可能になり、メソッド呼び出しのポリモーフィズムと柔軟性が可能になります。効率的で柔軟な Java プログラムを作成するには、早期バインディングと遅延バインディングの違いを理解することが重要です。

以上がJava の早期バインディングと遅延バインディングの違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:tutorialspoint.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!