Cette classeclasses imbriquées statiques Instantiation
public class Main {
public static void main(String[] args) {
Main m = new Main();
m.new A();
m.new B(); //1 - compilation error
new Main.B();
}
class A{}
static class B{} //2
}
se traduira par une erreur de compilation à la ligne 1:
Illegal enclosing instance specification for type Main.B
Mais je ne comprends pas pourquoi, je trouve un peu contre-intuitif: à la ligne 2 nous avons une définition de classe statique, ne devrait-elle pas aussi être accessible à partir de l'objet m?
Modifier
Si Main
avait une variable i
, m.i
statique ne serait pas aboutir à une erreur de compilation. Pourquoi le comportement est-il différent avec la définition de classe?
L'accessibilité n'est pas pertinente. La classe StringBuilder est également accessible depuis l'objet 'm'. Mais vous n'utilisez pas 'm.new StringBuilder()' pour l'instancier. La syntaxe 'm.new' est utilisée pour instancier une classe interne de Main faisant référence à l'objet englobant' m'. B n'est pas une classe interne et n'a aucune référence implicite à un objet principal. –
@JBNizet Jetez un oeil à mon édition, s'il vous plaît –
Ce n'est pas une classe interne? Seules les classes non statiques sont définies "interne", tandis que les classes statiques sont "imbriquées"? –