Methoden Verschiedene Objekte aus mehreren Klassen in ein Array speichern

Y

YellowSun

Gast
Hallo zusammen ;)

ist mein erster Post hier.Ich hoffe mir kann einer helfen :)

Ich habe 2 Klassen, die Klasse User und eine daraus abgeleitete Klasse Student. In der Main-Funktion sollen 6 Objekte in ein Array reingelegt werden. 3 vom Typ User und 3 vom Typ Student. Danach werden die Objekte mit ihren Attributen aus dem Array mittels einer For-Schleife und den jeweilligen get-Methoden herausgelesen. Dies funktioniert mit Objekten und Methoden der Klasse User. Wenn ich jetzt aber die get-Methoden der Klasse Student verwenden will, dann versteht der Compiler nicht, dass in diesem Index des Arrays Objekte des Typs Student abgelegt sind und führt die dazugehörige Methoden nicht aus: Kunden.getMatrikelnummer() und Kunden.getSemester
Eigentlich sollte dies doch durch die Ableitungskompatibilität funktionieren oder?
Ich sitze schon lange an diesem Problem und weiß absolut nicht weiter.


Klasse User:
Java:
public class User {

    private String name;
    private int maxBooks;

    User() {
        name = "unbekannt";
        maxBooks = 3;
    }

    User(String name, int maxBooks) {
        this.name = name;
        this.maxBooks = maxBooks;
    }

    void Setname(String name) {
        this.name = name;
    }

    void setmaxBooks(int maxBooks) {
        this.maxBooks = maxBooks;
    }

    String getName() {
        return name;
    }

    int getMaxBooks() {
        return maxBooks;

    }
}

Klasse Student
Java:
class Student extends User {

    private int semester;
    private int matrikelnummer;

    Student() {
        super();
        semester = 1;
        matrikelnummer = 0000;
    }

    Student(String name, int maxBooks, int semester, int matrikelnummer) {
         
        super(name,maxBooks);
        this.semester = semester;
        this.matrikelnummer = matrikelnummer;
    }

    void setSemester(int semester) {
        this.semester = semester;
    }

    void setMatrikelnummer(int matrikelnummer) {
        this.matrikelnummer = matrikelnummer;
    }

    int getSemester() {
        return semester;
    }

    int getMatrikelnummer() {
        return matrikelnummer;
    }
}
Main Methode
Java:
public static void main(String[] args) {
        User[] Kunden = new User[6];

        Kunden[0] = new User("Johannes", 1);
        Kunden[1] = new Student("Lisa", 12, 4710, 5);
        Kunden[2] = new User("Maria", 3);
        Kunden[3] = new Student("Nora", 10, 4713, 3);
        Kunden[4] = new Student("Josef", 11, 4714, 6);
        Kunden[5] = new User("Irina", 3);

        for (int i = 0; i <= 5; i++) {

            if (Kunden[i] instanceof Student) 
           {
           System.out.println(Kunden[i].getName() + " Student/in max Buecher: " +                 Kunden[i].getMaxBooks() + "; Matrikelnummer: " + Kunden[i].getMatrikelnummer() + "; 
aktuelles  Semester: " + Kunden[i].getSemester());

            } 
          else {
                System.out.println(Kunden[i].getName() + " max Buecher: " + Kunden[i].getMaxBooks());
            }
        }
    }
[/Java]
 

turtle

Top Contributor
Du speicherst in Deinem Array ja User-Objekte. Woher soll java denn wissen, das einige Objekte Studenten sind und das Du Methoden von Student aufrufen möchtest.

Also, wenn das unbedingt ans Laufen kommen soll, kannst Du ja so etwas machen
Java:
		 if (Kunden[i] instanceof Student) {
			 Student student = (Student) Kunden[i]; // Nein, ich weiss es besser
         System.out.println(Kunden[i].getName() + " Student/in max Buecher: " +                 Kunden[i].getMaxBooks() + "; Matrikelnummer: " + Kunden[i].getMatrikelnummer() + "; 
aktuelles  Semester: " + student.getSemester());
          }
 

Michael...

Top Contributor
Eigentlich sollte dies doch durch die Ableitungskompatibilität funktionieren oder?
Ich sitze schon lange an diesem Problem und weiß absolut nicht weiter.
Nein, wieso sollte es auch ein Student ist ein User aber ein User ist kein Student.
Hier kannst Du erst prüfen (per instanceof) ob es sich um ein Studenten handelt und dann ggf. das User Objekt in ein Student Objekt casten.
 

Kiri

Bekanntes Mitglied
du musst erst das User-Objekt zu einem Student-Objekt casten.

so z.B.:

Java:
           if (Kunden[i] instanceof Student) {
                Student study = (Student)Kunden[i];
                System.out.println(Kunden[i].getName() + " Student/in max Buecher: " +
                   Kunden[i].getMaxBooks() + "; Matrikelnummer: " + study.getMatrikelnummer() 
                   + ";aktuelles  Semester: " + study.getSemester());
            }

[EDIT]
da war ich wohl zu spät :oops:
[/EDIT]
 
Zuletzt bearbeitet:
Y

YellowSun

Gast
Ne das funktioniert auch nicht! Gerade ausprobiert. Dann funktioniert das speichern der User Objekte in das Array nicht.... Also mir wurde beigebracht, dass das Array den Typ der Basisklasse haben muss und dies habe ich ja gemacht.
 
Y

YellowSun

Gast
So jetzt habe ich es verstanden! Oh man komm mir ziemlich blöd vor :D Stand da voll auf dem Schlauch. Habs bei mir umgeschrieben und es funktioniert jetzt ;) DANKE FÜR EURE SCHNELLE HILFE :D
 

Neue Themen


Oben