しかし、引数が同じで、戻り値が異なる。というメソッドの定義はできません。と思っていたんですが、スタティックなメソッドの場合のみ、そうじゃないということを最近知りました。
人の書いたコードレビューって、こういう発見があって楽しいですね!。で、コード例は以下のとおり。
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();
}
}
}
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
TEST2=TestApp$SubClass
0 件のコメント:
コメントを投稿