3

Wenn Sie einen Superklassenkonstruktor aus einer untergeordneten Klasse der zweiten Ebene verwenden, wird das Argument an den Großelternkonstruktor oder den unmittelbaren übergeordneten Konstruktor übergeben?Aufruf des Superklassenkonstruktors aus der Enkelklasse, ruft Eltern- oder Großelternkonstruktor auf?

//top class 
public First(type first){ 
    varFirst = first; 
} 

//child of First 
public Second(type second){ 
    super(second); //calls First(second) 
} 

//child of Second 
public Third(type third){ 
    super(third); //calls First(third) or Second(third)? 
} 
+0

Typ (Klasse Typ gemäß Benennungskonventionen) unter der Annahme derselben für alle 3 Klassen, und varFirst ist auch eine Instanz von Type, dann ** Yes **, Beispielbeispiel, das Sie ausprobieren können: Ersetze Typ mit ** int ** und bei jedem Konstruktor System.out.println (intValue); -> Konstruktor Third übergibt einen Wert say * 2 * an Second und an First ABER das Drucken von Sysout wird der Reihenfolge First-Second-Third (kurz Third wird nur Second aufrufen, BUT Second wird First aufrufen und der Flow geht weiter) –

Antwort

4

super ruft den Konstruktor der unmittelbaren Mutter. So würde die super Anruf in ThirdSecond 's Konstruktor aufrufen, die wiederum First anrufen. Das ist ganz einfach für sich selbst zu sehen, wenn Sie einige print-Anweisung in der Konstrukteurs hinzufügen:

public class First { 
    public First(String first) { 
     System.out.println("in first"); 
    } 
} 

public class Second extends First { 
    public Second(String second) { 
     super(second); 
     System.out.println("in second"); 
    } 
} 

public class Third extends Second { 
    public Third(String third) { 
     super(third); 
     System.out.println("in third"); 
    } 

    public static void main(String[] args) { 
     new Third("yay!"); 
    } 
} 

Der Ausgang würden Sie erhalten:

in first 
in second 
in third