Java 8でデフォルトのメソッドを作成するときに、ある特定のObject
メソッドは、デフォルトのメソッドから呼び出すことができません。たとえば:特定のObjectメソッドをデフォルトメソッドから呼び出すことができないのはなぜですか?
interface I {
default void m() {
this.toString(); // works.
this.clone(); // compile-time error, "The method clone() is undefined for the type I"
this.finalize(); // same error as above.
}
}
clone()
とfinalize()
が許可されていないObject
からの唯一の方法であると思われます。偶然にも、これは保護されるObject
の唯一のメソッドですが、この問題は、デフォルトのメソッドに特に関係します。java.lang.Object
を継承するクラスに継承されるためです。これの理由は何ですか?
[なぜjava.lang.Objectでclone()メソッドが保護されていますか?](http://stackoverflow.com/questions/1138769/why-is-the-clone-method-protected-in- java-lang-object) – Sean
@ SPrashad私は同意しません。その質問は、インターフェイスのデフォルトメソッドで呼び出し可能でない理由とは関係ありません。 – rgettman