simpler code mit versteckten fallen!



  • hi leute, könnte mir bitte jemand kurz mal den code da unten erklären??
    (jeder hat mal klein angefangen!

    class A
    {
    	public void foo() 
    	{
    		System.out.println("A");
    	}
    }
    
    class B extends A
    {
    	public void foo() 
    	{
    		System.out.println("B");
    	}
    }
    
    class C extends B
    {
    	public void foo() 
    	{
    		super.foo();  // was bewirkt dieses super.foo() hier eigentlich?? 
    //lieg ich richtig in der annahme dass hier von der superklasse in dem fall class 
    //b die funktion foo() aufgerufen wird?? 
    		System.out.println("C");
    	}
    }
    
    public class Test
    {
    	public static void main(String [] args) 
    	{
    		A a = new A();
    		B b = new B();
    		C c = new C();
    		B b1;
    
    		A a1 = a;
    
    	//	b1 = (B)a1;  hier funkt das kasten nicht! warum??
    
    		a1.foo();    //erstes "A"
    		a1 = c;		 //ausgabe von "B"
    
    	//	c = b; 		//incompatible classen!!
    
    		a1.foo();   //a1 = c! ausgabe "C"
    
    		b1 = (B)a1; //weil hier funkt es aber!
    
    		b1.foo();
    	}
    }
    

    bitte danke!!



  • super.foo(); // was bewirkt dieses super.foo() hier eigentlich??
    //lieg ich richtig in der annahme dass hier von der superklasse in dem fall class
    //b die funktion foo() aufgerufen wird??

    Ja, richtig.
    Zum Rest:

    Mach dir klar, dass in einer abgeleiteten Klasse mehr Informationen stehen.

    b1 = (B)a1; hier funkt das kasten nicht! warum??

    Hätte B einige Membervariablen die A nicht hat, können diese nicht gestezt werden.

    b1 = (B)a1; //weil hier funkt es aber!

    a1 ist jetzt ein C Objekt. In C stehen insbesondere alle Informationen
    aus B, deshalb geht das.

    Jockel


Log in to reply