abstrakte Klasse



  • huhu

    hab wieder mal eine Frage^^... eine Verständnisfrage:

    Von einer abstrakten Klasse kann man ja kein Objekt erzeugen.

    public class Test
    {
    	public static void main(String [] args)
    	{
    		A a = new B(); // Error: Cannot instantiate the type A
    
    	}
    }
    
    abstract class A
    {	
    	abstract public void init();
    }
    

    Beim Instanzieren einer abgeleiteten Klasse wird ja immer zuerst der Konstruktor der Basisklasse aufgerufen und dann ein Anonymes Objekt der Basisklasse erzeugt...

    Aber ich kann doch eine abstrakte Klasse gar nicht instanzieren, wieso funktioniert es aber bei Vererbung trotzdem oO ??

    public class Test
    {
    	public static void main(String [] args)
    	{
    		A a = new B(); // Ausgabe: A
    	}
    }
    abstract class A
    {	
    	A()
    	{
    		System.out.println("A");
    	}
    	abstract public void init();
    }
    class B extends A
    {
    	B()
    	{
    		super();
    	}
    	public void init() {}
    }
    

    danke schonmal für Antworten 🙂



  • Die Antwort is Polymorphismus.

    Wenn du eine Klasse B hast, die von A abgeleitet ist, so ist ein Objekt der Klasse B auch ein Objekt der Klasse A.

    Mit dem Aufruf A a = new B() erzeugst du ein Objekt der Klasse B. Weil aber B von A erbt ist das Objekt a auch ein Objekt der Klasse A. Du kannst also Objekte einer abstrakten Klasse in einer konkreten Implementierung erzeugen.

    Wiso ist das Objekt von der Klasse B auch ein Objekt der Klasse A?
    Weil durch das ableiten Gewährleistet ist, dass ein Objekt der Klasse B sämtliche Schnittstellen der der Klasse A hat (und natürlich noch weitere der Klasse B).

    Hoffe, dass das einigermassen verständlich ist.



  • joa durch deine und die Antworten in der cpp-Abteilung hab ich es nun gerafft 🙂


Anmelden zum Antworten