ホームページ >Java >&#&チュートリアル >Java 関数のオーバーロード メカニズムで最も一致するメソッドを決定するにはどうすればよいですか?
Java 関数のオーバーロード一致ルールは次のとおりです。 完全一致: パラメータのタイプと数値が変数パラメータに正確に一致: 変数パラメータ メソッドは、任意の数またはタイプのパラメータに一致します パッケージ化タイプと元のタイプの変換: 基本タイプとパッケージ化タイプは相互に排他的になる可能性があります 変換のオートボックス化/unboxing: 基本型の値とラップされた型オブジェクトは自動的に派生クラス型に変換できます: 派生クラス オブジェクトは基本クラスの型パラメーターと一致できます
Java マッチング関数オーバーロード メカニズムのルール
関数オーバーロードを使用すると、同じクラス内に同じ名前で異なるパラメーターの型を持つ複数のメソッドを作成できます。オーバーロードされたメソッドが呼び出されるとき、JVM は引数リストに基づいて呼び出すのに最適なメソッドを決定します。
最適一致の判定ルール
class Example { public void method(int a) { // ... } public void method(int a, int b) { // ... } }
method(1)
を呼び出すと、method(int a)
と一致します。
class Example { public void method(Object... args) { // ... } public void method(int a, int b) { // ... } }
method(1)
または method(1, 2, "Hello")
の呼び出しは、method(Object... args と一致します) )
。
Integer
など) と対応するプリミティブ型 (int など)
) は相互に変換できます。 raw 型パラメータに一致するメソッドが存在するが、ラップされた型パラメータを使用して呼び出された場合、またはその逆の場合でも、そのメソッドは一致していると見なされます。 class Example { public void method(int a) { // ... } public void method(Integer a) { // ... } }
method(1)
または method(new Integer(1))
の呼び出しは、これら 2 つのメソッドと一致します。
class Example { public void method(int a) { // ... } public void method(Integer a) { // ... } }
method(1)
または method(Integer.valueOf(1))
の呼び出しは、これら 2 つのメソッドと一致します。
class Animal { public void makeSound() { // ... } } class Dog extends Animal { public void makeSound() { // ... } }
makeSound(new Dog())
の呼び出しは、makeSound(Animal a)
メソッドとも一致します。
実際的なケース
次のメソッドを持つ Shape
クラスがあるとします。
public class Shape { public void draw() { // ... } public void draw(int size) { // ... } public void draw(int size, boolean fill) { // ... } }
## を呼び出すとき#Shapeshape = new Shape();shape.draw(5);、JVM は最も一致するメソッドが
draw(int size) であると判断します。これは、呼び出しで
size パラメータが指定されているが、
fill パラメータが指定されていないため、
draw(int size, boolean fill) は完全に一致しません。
以上がJava 関数のオーバーロード メカニズムで最も一致するメソッドを決定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。