Quando si crea un metodo predefinito in Java 8, alcuni metodi Object
non possono essere richiamati dal metodo predefinito. Per esempio:Perché alcuni metodi Object non possono essere richiamati dai metodi predefiniti?
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.
}
}
Sembra che clone()
e finalize()
sono gli unici metodi da Object
che non sono consentiti. Coincidently, questi sono gli unici metodi di Object
che sono protetti, ma questa domanda riguarda in particolare i metodi predefiniti, in quanto verranno ereditati dalle classi che si estendono java.lang.Object
. Qual è la ragione di questo?
Possibile duplicato di [Perché il metodo clone() è protetto in java.lang.Object?] (Http://stackoverflow.com/questions/1138769/why-is-the-clone-method-protected-in- java-lang-object) – Sean
@SPrasha Non sono d'accordo. Questa domanda non ha nulla a che fare con il motivo per cui non è richiamabile nel metodo predefinito di un'interfaccia. – rgettman