Java Vererbung Aufgabe

MasterMaso

Lt. Commander
Registriert
Apr. 2018
Beiträge
1.833
Hallo,

ich habe folgende zusammenhängende HA bekommen:
1607285545487.png

leider blicke ich bei der Vererbung nicht durch, wie ich z.B. auf die Getter und Setter der Unterklasse zugreifen kann.
Als Möglichkeit Aufgabe 2 zu realisieren kam mir in den Sinn eine ArrayList zu verwenden, leider fehlt es mir aber an einer Idee diese bestmöglich zu befüllen.
Folgendes habe ich bereits gemacht:
Java:
public abstract class Professor {
    
    private String name;
    
    private ArrayList<Vorlesung> vorl= new ArrayList<Vorlesung>();
    
    public void addProfs(Vorlesung vorle) {
        vorl.add(vorle);
    }
    
    
    public int swsHolen() {
        return getSws();
    }
Java:
public class Vorlesung extends Professor {

    private String titel;
    private int sws;
    
    public String toString() {
        return "Die Vorlesung "+ getTitel() + " hat " + getSws() + " Semesterwochenstunden.";
    }
    public boolean equals(Object o) {
        if(o instanceof Vorlesung) {
            Vorlesung v= (Vorlesung)o;
            return getTitel().equals(v.getTitel()) && getSws()==v.getSws();
        }else {
            return false;
        }
    }

    public String getTitel() {
        return titel;
    }

    public void setTitel(String titel) {
        this.titel = titel;
    }

    public int getSws() {
        return sws;
    }

    public void setSws(int sws) {
        this.sws = sws;
    }

}
Die Main Klasse habe ich noch nicht bearbeitet, da ich bereits daran scheitere auf die jeweiligen Methoden etc korrekt zuzugreifen.
Auch nach mehreren Stunden Recherche hat es leider noch nicht wirklich Klick gemacht.

Ich hoffe mir kann hier geholfen werden
MfG MasterMaso
 
MasterMaso schrieb:
Die Aufgabe hat überhaupt nichts mit Vererbung zu tun. "Vorlesung extends Professor" sollte einem schon beim Lesen übel aufstoßen. Die beiden Klassen haben nichts gemeinsam (außer dass sie irgendwas mit der Uni zu tun haben).
 
  • Gefällt mir
Reaktionen: Nase
Die Vorlesung braucht doch aber als Eigenschaft den Namen des Profs, weshalb ich diesen vererben wollte.
 
Nee, sie braucht nur den Professor als Eigenschaft (e.g. private Professor betreuender_prof; ).

Du erbst ja auch nicht von String damit du den namen speichern kannst.

Merke: Vererbung bei "is a", "a horse is an animal". Eigenschaften bei "has", "an animal has a name".
 
  • Gefällt mir
Reaktionen: Raijin, MasterMaso und abcddcba
MasterMaso schrieb:
Die Vorlesung braucht doch aber als Eigenschaft den Namen des Profs, weshalb ich diesen vererben wollte.
Lies dir bitte nochmal durch was Vererbung bedeuten soll. Du darfst eine Klasse gerne mal als eine Menge von Objekten mit bestimmen Eigenschaften und Methoden betrachten. Speziellere Klassen haben dann halt weitere Eigenschaften zusaetzliche Eigenschaften und Methoden, evtl. machen sie vorhandene Methoden aber auch einfach anders (override)

Dann sieh dir nochmal deine aktuelle Modellierung an, evtl. erkennst du den Fehler - falls nicht, noch ein anderes Buch oder Tutorial lesen. Sonst kommst du bei Objektorientierung nicht weiter. Du musst die grundlegenden Begriffe verstehe, Attribut, Methode, Funktion, Klasse, Objekt, etc.
 
Okay, also quasi einfach einen Konstruktor für Professor und Vorlesung bauen um auf die Methoden zuzugreifen?
 
Wie meine Vorredner bereits gesagt haben geht es hier nicht um Vererbung, sondern um die Beziehung zwischen den beiden Klassen. Stichwort: "Assoziation".

Also einfach mal bei youtube/google nach "java assoziation" suchen.
 
"jede Vorlesung wird nur durch einen Professor betreut"

Das ist in dem Fall wichtig. Darüber solltest du nachdenken.

Eine Vorlesung ist kein Professor und auch nicht umgekehrt.
 
Man kann hier gut der Intuition vertrauen: Eine Vorlesung IST ein Professor? Sicherlich nicht. Eine Vorlesung HAT einen Professor? Das ergibt Sinn. Entsprechend sollte Vorlesung einen Member ala dozent vom Typ Professor haben.

Professor#swsHolen kompiliert nicht, wo soll die Methode getSws() herkommen?

Die Variablennamen darfst du gern ausschreiben, dann hast du auch nicht das Problem das die eine Variable "vorl" heißt und die andere "vorle". Warum sie addProfs heißt ist auch vollkommen unerklärlich, wo sie doch eine Vorlesung in eine Liste von Vorlesungen eingefügt. Also eher addVorlesung(Vorlesung vorlesung). Und die Liste darf dann vorlesungen heißen.
 
  • Gefällt mir
Reaktionen: Nase
Wie schon von anderen gesagt, geht es hier um Relationen, nicht um Vererbung. Ist allgemein auch bei Datenbanken ein Thema. Google mal danach und lerne was über 1:1-, 1:n- oder m:n-Relationen. Wenn es nicht 1:1 ist, ist eine Collection durchaus angebracht (wovon ArrayList eine Implementation ist, schau Dir mal das Interface "Collection" von Java an).

Was in der Aufgabenstellung etwas schwammig ist: wenn man die Gesamt-SWS eines Professors ermitteln soll, muss man in der entsprechenden Methode an dessen Vorlesungen kommen. Aber vermutlich ist das beabsichtigt und Du sollst Dir darüber Gedanken machen.

Oh, und tritt dem Aufgabensteller dafür in den Hintern, dass equals() aber nicht hashCode() implementiert werden soll.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: MasterMaso und Marco01_809
Ich danke euch für eure Hilfe. Ich denke ich bin jetzt dahinter gekommen, was das Problem war.
Ich werden mich definitiv noch genauer mit der Objektorientierung beschäftigen müssen.
 
Nur als gutgemeinter Hinweis: bis auf weiteres erstmal Generics weglassen. Das kann man machen, wenn man OO verstanden hat, aber bis dahin sind generics konträr zu OO.

Und wenn sich nicht gar zu viel am Konzept geändert hat: nein du willst und sollst gar nicht von oben auf Unterklassen zugreifen. OO ist hierarchisch - Eine Richtung, nämlich nach oben.
Nicht seitwärts und auch nicht nach unten.
 
Zurück
Oben