Probleme mit abgeleiteter Klassse



  • Hallo,

    Ich habe ein Problem mit einer Aufgabe zum Thema vererbung.,

    Aufgabenstelleung lautet wie folgt:

    Betrachten Sie bitte folgendes Quelltextfragment. Es erzeugt ein Array für Instanzen der
    Klasse Baer und ruft für jedes Element im Array die Methode Ausgeben()auf.
    Baer[] Baerenliste = new Baer[2];
    Baerenliste[0] = new Baer(200, 3);
    Baerenliste[1] = new ElternBaer(500, 5, 20);
    foreach (Baer testBaer in Baerenliste)
    testBaer.Ausgeben();
    Die Klasse ElternBaerist von der Klasse Baerabgeleitet und verfügt über eine eigene Methode Ausgeben(), die die Methode Ausgeben()der Basisklasse überschreiben soll. Die Methode Ausgeben()der abgeleiteten Klasse ist nichtmit overridemarkiert.
    Wird die Methode der Basisklasse tatsächlich überschrieben? Wie lauten die vollständigen Namen der Methoden, die in der Schleife aufgerufen werden? Geben Sie die Namen
    bitte im Format <Klassenname.Methodenname>an.

    Ich habe mal angefangen und bin eigentlich soweit durch nur eins fehlt mir und zwar gibt mir die zweite instanz den wert der Kinder nicht wieder, was mache ich da falsch?

    // die Basisklasse Baer
        class Baer
        {
            int gewicht;
            int alter;
    
            public Baer(int gewicht, int alter)
            {
                this.gewicht = gewicht;
                this.alter = alter;
            }
    
            public int GetGewicht()
            {
                return gewicht;
            }
            public int GetAlter()
            {
                return alter;
            }
    
        }
        // vererben von Baer nach ElternBaer
    
        class ElternBaer : Baer
        {
            int anzahlKinder;
    
            // ein eigener Konstruktor
            public ElternBaer(int gewicht, int alter, int anzahlKinder): base(gewicht, alter)
    
            {
    
                this.anzahlKinder = anzahlKinder;
            }
    
            public int GetanzahlKinder()
            {
                return anzahlKinder;
            }
    
        }
    
        class Program
        {
            static void Main(string[] args)
            {
                Baer[] Baerenliste = new Baer[2];
                Baerenliste[0] = new Baer(200, 3);
                Baerenliste[1] = new ElternBaer(500, 5, 20);
    
                foreach (Baer testBaer in Baerenliste)
    
                   testBaer.Ausgeben();
    
                Console.WriteLine(" Der alte Bär ist {0} Jahre alt und wiegt {1} Kilo.", Baerenliste[0].GetAlter(), Baerenliste[0].GetGewicht());
    
                Console.WriteLine(" Der alter Bär ist {0} Jahre alt und wie {1} Kilo, er hat {2} Kinder.", Baerenliste[1].GetAlter(), Baerenliste[1].GetGewicht()Baerenliste[1].GetanzahlKinder());
            }
        }
    }
    

    ich bin für jeden Tipp dankbar



  • jonnywhite7 schrieb:

    was mache ich da falsch?

    Dein Code hat nichts mit der Aufgabenstellung zu tun.



  • Hallo,
    warum nicht ?

    Ich hab doch nur den Aufgaben Text in ein Program übernommen um es so für mich zu verdeutlichen. Die Fragen hab ich ja schon beantwortet. Nein es wird nicht überschrieben. Und den klassennamen.Mehtodennamen stehen ja auch da.

    Meine Frage War nur warum er mir die methode GetanzahlKinder nicht annimmt.

    Wo da mein Fehler liegt.



  • jonnywhite7 schrieb:

    warum nicht ?

    Möglicherweise hast du die Aufgabenstellung nicht vollständig wiedergegeben, aber da steht nichts davon, dass du Code produzieren sollst. Da wird eine Ja/Nein-Antwort und die Nennung eines Methodennamen verlangt.

    jonnywhite7 schrieb:

    Meine Frage War nur warum er mir die methode GetanzahlKinder nicht annimmt.

    Weil "er" der Meinung ist, dass die Klasse Baer keine Methode GetanzahlKinder hat. Und damit hat "er" recht.



  • Kleiner Denkansatz für dich:

    ElternBaer a = new Elternbaer();
    a.GetanzahlKinder(..); //GEHT
    
    Baer a = new Elternbaer(..);
    a.GetanzahlKinder(); //GEHT NICHT
    

    Polymorphie!

    Deswegen sollst du auch eine Methode "Ausgeben()" in Baer definieren

    und ich ElternBaer überschreiben (=> override)

    So jetzt denkt du mal nach!!



  • Jap vielen Dank hatte es dann Gesehen hab es geändert 👍 😃


Anmelden zum Antworten