2011年3月23日水曜日

[Java]戻り値が異なる引数の同じオーバーロード

Javaでは、メソッドのオーバーロードという機能があり、引数の型または数の異なる同じ名前のメソッドを定義することができます。
しかし、引数が同じで、戻り値が異なる。というメソッドの定義はできません。と思っていたんですが、スタティックなメソッドの場合のみ、そうじゃないということを最近知りました。
人の書いたコードレビューって、こういう発見があって楽しいですね!。で、コード例は以下のとおり。

class TestApp {

    public static void main(String[] args) {
        System.out.println("TEST1=" + BaseClass.getInstance());
        System.out.println("TEST2=" + SubClass.getInstance());
    }

    static class BaseClass{
        private static BaseClass instance1 = new BaseClass();
        public static BaseClass getInstance(){return instance1;}
        public String toString() {
            return getClass().getName();
        }
    }

    static class SubClass extends BaseClass{
        private static SubClass instance2 = new SubClass();
        //staticの場合は、引数違いのオーバーロードが可能!
        public static SubClass getInstance(){return instance2;}
        public String toString() {
            return getClass().getName();
        }
    }
}


■結果
TEST1=TestApp$BaseClass
TEST2=TestApp$SubClass

0 件のコメント :