Se esiste un costruttore privato, la JVM inserisce una chiamata al super costruttore?Uso del costruttore privato nella classe
Mi riferisco alla chiamata super()
in tale costruttore privato.
class Alpha {
static String s="";
protected Alpha(){
s+="alpha";
}
}
class SubAlpha extends Alpha{
private SubAlpha(){
s+="sub";
}
}
class SubSubAlpha extends Alpha{
private SubSubAlpha(){
s+="subsubAlpha";
}
public static void main(String[] args){
new SubSubAlpha();
System.out.print(s);
}
}
Qui non si ottiene alcun errore di compilazione. Qui nella classe SubSubAlpha
c'è un costruttore privato. È che il compiler inserisca la chiamata super()
in questo caso, cosa succede nella classe SubAlpha
. Anche lì c'è un costruttore privato. E se non si accede a ciò, l'albero ereditario continua fino in cima.
(Se la classe di super no-args costruttore è di classe privata (e derivati non è nella stessa classe esterna, o è l'accesso predefinito e la classe derivata non è nello stesso pacchetto, o è semplicemente mancante), quindi se i costruttori della classe derivata mancano un esplicito 'super()' o 'this()', quindi non riusciranno a compilare. 'class Base {private Base() {} } classe Derived estende Base {} ') –
intendevi che' classe SubSubAlpha estende SubAlpha'? –