specific)なメソッドとする。それは必然的に,適用可能でアクセス可能な他のどのメソッドよりも特殊とする。したがって,それは15.12.3で示されたように,さらにコンパイル時の検査が必要とする。二つ又はそれ以上の最大限に特殊なメソッド宣言があるために,どのメソッドも最も特殊ではないことがある。この場合を,次に示す。宣言しないのならば,それは最も特殊なメソッドとする。特殊なメソッドは,その最大限に特殊なメソッドの中から勝手に選択される。その最も特殊なメソッドは,検査例外がそれぞれの最大限に特殊なメソッドのthrows節の中で宣言された場合に限り,その例外を投げると考えられる。なければ,そのメソッド呼出しはあいまいであるとよび,及びコンパイル時エラーが発生する。オーバロードのあいまいさ次の例について考える。error}}この例はコンパイル時にエラーを生じさせる。二つの宣言があり,どちらも他方より特殊ではないことである。それゆえ,このメソッド呼出しはあいまいとする。ColoredPoint)");}これは他の二つより特殊になるので,このメソッド呼出しはもはやあいまいではない。別の例として,次を考える。仮引数にとるものとする。変換できないためにコンパイル時エラーが発生する。この例は,メソッドの返却値の型はオーバロードされたメソッドの解決には関与しないことを示す。メソッドは,この例のプログラムをエラーなしにコンパイルできるようにする返却値の型をもつ場合でさえも,選択されない。コンパイル時の解決コンパイル時に,最も適用可能なメソッドが選ばれる。その記述子は,実行時にどのメソッドが実際に実行されるかを決定する。新しいメソッドがクラスに追加されるならば,たとえ再コンパイルすれば新たなメソッドが選ばれるようになるとしても,そのクラスの古い定義でコンパイルされたソースコードはその新しいメソッドを使用しない。例として,二つのコンパイル単位を考える。")";}}そしてもう一つはクラスColoredPointとする。用いる3番目のコンパイル単位を考える。cp);}}この出力は次の通りである。対するドキュメントはもっと正確であるべきとする。型であることに注意すること。クラスのバイナリ表現の一部となり,実行時にメソッド呼出しに使用される。次のメソッドを追加することにより訂正することを決めたと仮定する。新しいバイナリファイルとともに実行するならば,出力は次のように変化しない。void"という記述子をまだ持っているからである。void"であることを発見する。プログラムを実行すると,今度は望ましい出力を生成する。メソッドに防御的なコードを追加することにより,新たにコンパイルされたコードと古いコードの両方で動作するように修正することができる。p.y;}理想的には,ソースコードは,それが依存しているコードが変更されたときに常に再コンパイルされるべきとする。異なるクラスが異なる組織で管理されている環境では,これはいつも実現可能ではない。クラスの機能変更の問題に対して注意深く考慮する防御的プログラミングは,改良されたコードをより頑強にすることができる。バイナリ互換性と型の機能変更に関する詳細な議論については13.を参照すること。コンパイル時宣言においては,さらに次の三つの検査を行わねばならない。(15.8.3)が定義されない場所で,インスタンスメソッドを呼び出すために使用できないからである。そのメソッドがメンバである最内部取囲みクラスでなければならないと仮定する。内部クラスによって直接囲まれていないならば,コンパイル時エラーが発生する。して機能するオブジェクトへの参照を指定できないからである)。あるならば,コンパイル時エラーが発生する。そのメソッド呼出しが静的文脈内でおこなわれるならば,コンパイル時エラーが発生する。あるならば,コンパイル時エラーが発生する。そのメソッド呼出しが静的文脈内でおこなわれるならば,コンパイル時エラーが発生する。よって指示されるクラスだと仮定する。内部クラスによって直接取り囲まれていない場合,コンパイル時エラーが発生する。メソッド呼出しは最上位の式でなければならない。(その理由は,そのようなメソッド呼出しは値を返さないので,値が必要でない場合にだけ使用されるべきであるからである。次のコンパイル時情報が,実行時の使用のためにそのメソッド呼出しと関連づけられる。そのメソッド呼出しの限定型(13.1)。