English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java 基礎教程

Java プロセス制御

Java 配列

Java 面向オブジェクト(I)

Java 面向オブジェクト(II)

Java 面向オブジェクト(III)

Java 異常処理

Java リスト(List)

Java Queue(キュー)

Java Map 集合

Java Set 集合

Java 入出力(I/O)

Java Reader/Writer

Java 他のトピック

Java メソッドのオーバーロード

この記事では、メソッドのオーバーロードとその実装方法について、サンプルを用いて説明します。

Javaで、2つ以上のメソッドの引数が異なる場合(異なる数の引数、異なる種類の引数、または両方とも異なる場合)、同じ名前を持つことができます。これらのメソッドはオーバーロードされたメソッドと呼ばれ、この機能はメソッドのオーバーロードと呼ばれます。例えば:

void func() { ... }
void func(int a) { ... }
float func(double a) { ... }
float func(int a, float b) { ... }

ここでは、func()メソッドがオーバーロードされています。これらのメソッドは同じ名前を持っていますが、異なる引数を受け取ります。

注意してください、これらのメソッドの返却型は異なります。オーバーロードされたメソッドは異なる返却型を持つことができますが、異なる返却型を持たないこともあります。また、異なる引数を受け取る必要があります。

为什么方法重载?

假设您必须执行给定数字的加法运算,但是可以有任意数量的参数(为简单起见,可以说2个或3个参数)。

为了完成任务,可以分别为两个和三个参数创建两个方法sum2num(int, int)和sum3num(int, int, int)。但是,其他程序员以及您将来可能会感到困惑,因为这两种方法的行为相同,但名称不同。

完成此任务的更好方法是重载方法。并且,根据传递的参数,调用其中一个重载方法。这有助于提高程序的可读性。

如何在Java中执行方法重载?

以下是执行方法重载的不同方法:

1通过更改参数数量来重载

class MethodOverloading {
    private static void display(int a){
        System.out.println("参数: " + a);
    }
    private static void display(int a, int b){
        System.out.println("参数: " + a + “ 和 ” + b);
    }
    public static void main(String[] args) {
        display(1);
        display(1, 4);
    }
}

输出

参数: 1
参数: 1 和 4

2通过更改参数的数据类型

class MethodOverloading {
    //此方法接受int
    private static void display(int a){
        System.out.println("得到了整数数据.");
    }
    //此方法接受String对象
    private static void display(String a){
        System.out.println("得到了String对象。");
    }
    public static void main(String[] args) {
        display(1);
        display("Hello");
    }
}

输出

得到了整数数据
得到了String对象。

在这里,两个重载方法都接受一个参数。但是,一个接受int类型的参数,而另一个接受String对象。

让我们看一个真实的实例:

class HelperService {
    private String formatNumber(int value) {
        return String.format("%d", value);
    }
    private String formatNumber(double value) {
        return String.format("%.",3f", value);
    }
    private String formatNumber(String value) {
        return String.format("%.",2f", Double.parseDouble(value));}}
    }
    public static void main(String[] args) {
        HelperService hs = new HelperService();
        System.out.println(hs.formatNumber(500));
        System.out.println(hs.formatNumber(89.9934));
        System.out.println(hs.formatNumber("550"));
    }
}

このプログラムを実行すると、出力は以下のようになります:

500
89.993
550.00

注意:Javaでは、メソッドと同様にコンストラクタをオーバーロードすることもできます。

関連する推薦: Java コンストラクタのオーバーロード

注意事項

  • 同じクラス内で異なる引数を受け取る二つ以上のメソッドが存在する場合、それらは同じ名前を持つことができます。この機能はメソッドのオーバーロードと呼ばれます。

  • メソッドのオーバーロードは以下のいずれかの方法で実現できます:

    • 引数の数を変更することもできます。

    • または引数のデータ型を変更することもできます。

  • メソッドのオーバーロードを実現するために、メソッドの返り値の型のみを変更することはできません。