2016-06-03 6 views
-3

Ich habe dieses Problem gefunden und ich verstehe nicht, warum Konstruktoren im ersten Fall geerbt werden. Soweit ich weiß, werden Konstruktoren nicht vererbt. Fehle ich etwas sehr Wichtiges?Konstruktoren werden nicht vererbt, sondern verhalten sich seltsam

class Bird { 
{ System.out.print("b1 ");} 
public Bird() {System.out.print("b2 ");} 

class Raptor extends Bird 
{ 
    static {System.out.print("r1 ");} 

    public Raptor() {System.out.print("r2 ");} 

    { 
     { System.out.print("r3 ");} 
     static {System.out.print("r4 ");} 
    } 

class Hawk extends Raptor 
{  
    public static void main(String[] args) 
    {  
     System.out.print("pre "); 
     new Hawk(); 
     System.out.println("hawk "); 
    } 
} 

Die Antwort für die oben ist:

r1 r4 pre b1 b2 r3 r2 Habicht

+1

Bereinigen Sie Ihre Formatierung und präzisieren Sie, was Sie demonstrieren möchten. – shmosel

+0

Das sieht logisch aus. Was ist die Frage? Was verstehst Du nicht? –

+0

Ich fragte, wie die Ausgabe kam – sri

Antwort

1

Wenn Sie den übergeordneten Klasse Konstruktor (via super(...)) oder anderen Konstruktor von der nicht explizit nennen Gleiche Klasse (über this(...)), der Konstruktor der Elternklasse mit 0 Argumenten wird implizit aufgerufen.

Insbesondere Code public Raptor() {System.out.print("r2 ");} implizit ruft den Bird Konstruktor als das erste, was, wie, wenn Sie public Raptor() {super(); System.out.print("r2 ");}

Works getippt hatte in ähnlicher Weise für Ihre Hawk Unterklasse.

+0

Danke Elliot - aktualisiert – Krease