2016-11-04 3 views
5

J'ai trois classes simples:Comment sauter un niveau en héritage en appelant super de grandparent en java?

class A { 
    public A(int a){ } 
} 

class B extends A { 
    public B(int b){ super(b); } 
} 

class C extends B { 
    public C(int c){ super(c); } 
} 

Ainsi, l'ordre d'exécution lors de l'instanciation de classe est C> B> A> B> C et tous les objets sont instanciés correctement. Ensuite, la question:

JE en quelque sorte écrire un constructeur pour la classe C comme ceci:

public C(int c){ 
    super.super(c); 
    } 

L'idée est d'appeler le constructeur d'une classe, pas de B. parent immédiat Est-ce possible ?

+2

Eh bien, il n'y a pas de méthodes surchargées ici, alors appelez 'A (c)'. (Je suppose que c'est une faute de frappe - veuillez corriger votre code pour illustrer votre problème). –

+2

Le code ne sera même pas compilé pour le moment, car vous ne déclarez pas de constructeur - vous déclarez des méthodes avec des noms identiques aux classes. –

+1

A est censé être le constructeur, je suppose. OP devrait peut-être penser à son architecture, cependant. – Jeremy

Répondre

10

Non, vous ne pouvez pas faire cela. Toutes les classes dans une hiérarchie doivent être construites. Vous ne pouvez pas ignorer la construction de B.

Ce que vous pourrait faire est d'écrire un constructeur protected dans B qui est essentiellement un no-op et appeler que du constructeur dans C.