Il n'y a pas de moyen direct imposé par le compilateur pour faire cela, pour autant que je sache.
Vous pouvez contourner ce problème en pas en rendant la classe parente instanciable, mais en fournissant à la place une méthode de fabrique qui crée une instance d'une sous-classe (éventuellement privée) qui a l'implémentation par défaut :
public abstract class Base {
public static Base create() {
return new DefaultBase();
}
public abstract void frobnicate();
static class DefaultBase extends Base {
public void frobnicate() {
// default frobnication implementation
}
}
}
Vous ne peut pas écrire new Base()
maintenant, mais vous pouvez faire Base.create()
pour obtenir l'implémentation par défaut.