java.lang.StringのtoStringをオーバーライドできない

        

まず、以下のコードはコンパイルが通ります。

public class Rectangle {
int width;
int height;

public Rectangle(int width, int height) {
this.width = width;
this.height = height;
}

public String toString(int a, int b) {
return “[” + width + “, ” + height + “]”;
}

public static void main(String[] args) {
Rectangle rec = new Rectangle(100, 300);
System.out.println(rec.toString());
}
}

ですが、次のコードはコンパイルエラーとなります。

public class Rectangle {
int width;
int height;

public Rectangle(int width, int height) {
this.width = width;
this.height = height;
}

public void toString(int a, int b) {
System.out.println(“[” + width + “, ” + height + “]”);
}

public static void main(String[] args) {
Rectangle rec = new Rectangle(100, 300);
rec.toString();
}
}

これはjava.lang.StringのtoStringというメソッドをオーバーライドしているのですが
オーバーライドの基準が戻り値と引数(シグニチャ)と見ているみたいで
戻り値だけだと型の不一致でコンパイラに怒られます。

エラー文

Rectangle.java:10: Rectangle の toString() は java.lang.Object の toString() をオーバーライドできません。互換性のない戻り値の型を使おうとしました。
検出値 : void
期待値 : java.lang.String
public void toString() {
^
エラー 1 個

なのでオーバーライドされるメソッド
public String toString()

public void toString()

とどうしてもしたい場合は無駄に

public void toString(int a)

などとすればOKです。
OJC-Pの試験問題とかでそうですね。