class A {
  void hello() {
    System.out.println("hello");
  }

  static void hello2() {
    System.out.println("hello2");
  }

  String toString() {      /* メソッドの修飾子が問題 
;*/ 
    return "class A with hello,hello2\n";
  }
}

public class GetInfo {
  public static void main(String args[]) {
    A obj = new A();
    System.out.println(obj.toString());
  }
}

上記のコードをコンパイルすると`スーパークラスでの定義より弱いアクセス特権(public)を割り当てようとしました'なるエラーが出ます.
メソッドの修飾子を変えて試してみた所
public->ok
public static->NG
static->NG
と言う結果になりました.
ここで疑問が湧いてきた事は,
1.publicより修飾子無しの方がアクセス特権は弱いがなぜ弱い特権でオーバーライドできないのか(なんらかの不都合があるのか)
2.なぜstaticでオーバーライドできないのか.(これも不都合がある?)
です.
仕様って言ったらそれまでなんでしょうが..