2016-04-18 7 views
-3

Ich habe diese 7 Klassen mit Vererbungsbeziehungen.Warum kann mein Code kompilieren, aber Teil I und Teil II haben Laufzeitfehler, während Teil III ist in Ordnung

public class ClassA { 

    public ClassA() { 
    } 

    public void printer(int x, String y) 
    { 
     System.out.println("Class A"); 
    } 

} 

public class ClassB extends ClassA{ 

    public ClassB() { 
    } 

    public void printer(int x) 
    { 
     System.out.println("Class B"); 
    } 

} 

public class ClassC extends ClassA{ 

    public ClassC() { 
    } 

    public void printer(String x, String y) 
    { 
     System.out.println("Class C"); 
    } 

} 

public class ClassD extends ClassC{ 

    public ClassD() { 
    } 
     public void printer(String a, String b) 
    { 
     System.out.println("Class D"); 
    } 

} 

public class ClassE extends ClassC{ 

    public ClassE() { 
    } 

    public void printer(String x) 
    { 
     System.out.println("Class E"); 
    } 

} 

public class ClassF extends ClassE{ 

    public ClassF() { 
    } 

     public void printer(int x) 
    { 
     System.out.println("Class F"); 
    } 
} 

public class ClassG extends ClassE{ 

    public ClassG() { 
    } 

      public void printer(String x) 
    { 
     System.out.println("Class G"); 
    } 

} 

Darf ich fragen, warum der folgende Code in der Lage ist und zu kompilieren, warum gibt es einen Laufzeitfehler für i und ii aber iii in Ordnung ist. Es tut mir leid, wenn das ein leichtes Problem ist, aber ich habe mir stundenlang den Kopf darüber zerbrochen. Vielen Dank!

// part i 
ClassA a = new ClassC(); 
ClassG g = (ClassG)a; 
g.printer("hello"); 

// part ii 
ClassA a = new ClassC(); 
ClassG g = (ClassG)a; 
g.printer("hello", "there"); 

// part iii 
ClassA a = new ClassF();; 
ClassC f = (ClassC)a; 
f.printer(88,"there"); 

Edited: Für Teil I und II, der Fehler ist: Exception in thread "main" java.lang.ClassCastException: ClassC nicht ClassG gegossen werden kann. Meine Frage betrifft Polymorphismus, Upcasting und Downcasting. Ich brauche Hilfe, um es zu verstehen. Vielen Dank!

+1

Nun, was ist der Fehler ??? – OldProgrammer

+0

Es tut mir leid, ich habe es als Code bereits eingegeben. Es gibt keinen Fehler, ich würde gerne wissen, warum mein Code kompilierbar ist, aber es gibt Laufzeitfehler für Teil I und II, während Teil III in Ordnung ist? Meine Frage betrifft Polymorphismus, Upcasting und Downcasting. Ich brauche Hilfe, um es zu verstehen. – user292965

+1

Ein Laufzeitfehler ist ein Fehler. Wenn Sie fragen, warum Sie einen Fehler erhalten, sollten Sie den Fehler, den Sie in Ihrer Frage erhalten haben, mit angeben (complete stacktrace). – azurefrog

Antwort

0

Denken Sie daran, dass die Vererbung eine is-a Beziehung zwischen der Eltern- und der Kindklasse definiert. Das Übergeben einer untergeordneten Klasse funktioniert, wenn sie direkt mit der übergeordneten Klasse verknüpft ist.

In diesem Fall funktioniert es nicht. ClassGis-aClassC wegen der Vererbung, aber es gibt keine Garantie, dass ein ClassCist-aClassG.

+0

darf ich fragen, warum kompiliert es überhaupt erst? – user292965