23

Javaにコンパイル時のバインディングがない場合、これはすべてのバインディングが実行時に行われることを意味しますか?

ただし、ランタイムバインディングのOOPの概念に従って、関数には仮想キーワードが必要です。すべてのメソッドはJavaで暗黙的に仮想であるか、コンパイル時のバインディングがJavaに存在しますか。

コンパイル時のバインディングがある場合は、特定の状況、または詳細情報へのリンクを教えてください

  1. 静的(静的はオブジェクトに属していないため、ここではバインドの意味はありません)
  2. 最終(別の方法で達成できるため、これは有効なポイントではありません)
4

3 に答える 3

41

Javaでは、すべての非メソッド、非メソッドstaticfinalおよび非privateメソッドはデフォルトで仮想です。ただし、JVMは、特定のメソッドの実装が1つしかないクラスを見つけて、それを静的バインディングに変えるのに十分賢いです。

このように、パフォーマンスにそれほど影響を与えずに、キーワードについて覚えておく必要はありませんvirtual(C ++のデストラクタが欠落しているためにメモリリークが発生したことがありますか?)。virtual

于 2012-10-05T18:54:56.777 に答える
5

非静的メソッドの呼び出しは、Javaの主要な(唯一の)動的な側面です。すべてのメソッドはJavaで仮想化されています。これは、オブジェクトの静的タイプに基づいてコンパイル時にバインドされる静的メソッドには適用されません。

于 2012-10-05T18:56:46.210 に答える
0

サブクラスでオーバーライドできないメソッドは、一般に非仮想メソッドと呼ばれます。

Java staticでは、privateメソッドとfinalメソッドはデフォルトで非仮想です。他のメソッドはデフォルトで仮想です。

于 2017-02-06T07:03:26.117 に答える