質問: インターフェイスのtostring()、equals()、hashcode() そのため、実装する必要のある多数のメソッドとのインターフェイスがあり、メソッド名は無関係です。このインターフェイスを実装するオブジェクトは多くの場合コレクションに入れられ、使用したい特別なtostring()形式も持っています。したがって、hashcode()、equals()、およびtostring()をインターフェイスに配置して、これらのデフォルトメソッドをオーバーライドすることを忘れないようにするのが便利だと思いました。しかし、これらのメソッドをインターフェイスに追加したとき、明示的にインターフェイスに入れたとしても、これら3つのメソッドを実装していない場合、ide /コンパイラは文句を言いません。なぜこれが強制されないのですか?他のメソッドを実装しないと文句を言いますが、これらの3つを強制しません。何が得られますか?手がかりはありますか?
回答: javaから継承するすべてのオブジェクトはjava.lang.objectから継承し、 object はこれらのメソッドのデフォルト実装を提供します。インターフェイスに他のメソッドが含まれている場合、これらのメソッドの実装を提供してインターフェイスを完全に実装しないと、javaが文句を言います。ただし、equals()、hashcode()およびtostring()(および言及しなかった他のいくつかと同様)実装は既に存在します。希望することを達成できる方法の1つは、インターフェイスに別のメソッド、たとえばtoprettystring()などを提供することです。次に、デフォルトのtostring()メソッドの代わりにそのメソッドを呼び出すことができます。