深さ - なぜ、戻り値の型によって過負荷に区別することができませんか?

昨日、インターネットshuffleが、問題は、非常に興味深い参照してください。

過負荷(同じメソッド名、異なるパラメータリスト)この概念は、私たちはすべて知っていると信じて、インタビューの多くが求められます。

しかし、なぜ、戻り値の型によって過負荷に区別することができませんか?

最初のオーバーロードは、コンパイル時のポリモーフィズムを実装するJava多型の反射です。

例えば:

最大フロート(int型A、int型B);
int型の最大(int型A、int型b)は、
二つの方法上記、誰かの呼び出しは、直接、値を返さないです:MAX(...)、あなたはそれが望んで区別することができますどの機能を呼び出すには?

(1、2)MAXを呼び出すときに、コールは、過負荷に許されるべきではない異なる値型を返すために、上の一点からの、決定することができません。

また、Java仮想マシンにも問題が過負荷に言及しました:

で、「Java仮想マシンの深い理解、」章6.3.6で、このようなaがあります:

    Java言語では、元の単純な方法と同じ名前を持つことに加えて、メソッドをオーバーライドするだけでなく、それはオリジナルの署名と異なる方法を必要としていなければなりません。

    Java言語は、既存に異なる戻り値のみに依存することができないので、署名は、戻り値が署名に含まれていないためであるシンボル定数プール参照の分野における方法における様々なパラメータの集合でありますメソッドのオーバーロード。

    しかし、クラスファイル形式で、範囲の署名の多数限り、2つのディスクリプタはまったく同じ方法が共存することができるではありません。

    その後、同じまたは合法的にクラスファイルに保存することができ、2つの方法が同じ名前とシグネチャを持っている場合には、ですが、戻り値は異なります。

クラスファイル名と同じ方法では、同じパラメータ、戻り値は、なぜJavaファイルでそれをしないで、異なる場合がありますか?

Java言語仕様の規定ので、そのコンパイル時エラーが発生します。

なぜクラスファイルはできますか?別のJava仮想マシン仕様とJava言語仕様なので、二人は別のものです...

もっと興味を持っている場合は、この記事を読むことができます

Java言語のレベルとケーススタディのJVMレベルとメソッドシグネチャとの間の差

それでも掘る掘る何より、レベルが制限されていない.....
 

发布了393 篇原创文章 · 获赞 41 · 访问量 26万+

おすすめ

転載: blog.csdn.net/qq_32440951/article/details/88423815