Java, programmieren

Hallo, ich habe Probleme bei folgender Aufgabe. Ich hoffe ihr könnt mir auf die Sprünge helfen:

Schreiben Sie eine Klasse Student, die die Klasse Mensch beerbt.
Die Klasse Student enthält die zusätzliche Eigenschaft Matrikelnummer vom
Datentyp String, set- und get-Methoden für dieses Attribut und eine Methode
getTyp(), die einen String „Student“ zurückgibt.
Hinweis: Achten Sie auf die Datenkapselung für das Attribut
Matrikelnummer!
Der Konstruktor der Klasse Student initialisiert alle Attribute (auch die der
Klasse Mensch) mit zu übergebenden Werten.

Die Klasse Mensch war schon vorgegeben und sieht folgendermaßen aus:

package vererbung;

public class Mensch {

private int alter;
private char geschlecht;
private String name;

public Mensch(int alter, char geschlecht, String name) {
setAlter(alter);
setGeschlecht(geschlecht);
setName(name);
}

public int getAlter() {
return alter;
}

void setAlter(int alter) {
this.alter = alter;
}

public char getGeschlecht() {
return geschlecht;
}

void setGeschlecht(char geschlecht) {
this.geschlecht = geschlecht;
}

public String getName() {
return name;
}

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

public String getTyp() {
String typ = „Mensch“;
return typ;
}
}

Die Klasse Student habe ich angefangen zu schreiben, bekomme jedoch Fehlermeldungen:

package vererbung;

public class Student extends Mensch {

String Matrikelnummer;
public Student (String Matrikelnummer, int alter, char geschlecht, String name){
this.name = „Jan“;
this.alter = 18;
this.Matrikelnummer = „02030401“;
this.geschlecht = ‚männlich‘;

}

void setMatrikelnummer(String Matrikelnummer) {
this.Matrikelnummer = Matrikelnummer;
}

String getMatrikelnummer() {
return Matrikelnummer;
}

String getTyp(String Student) {
return Student;
}
}

Oben beim Konstruktor steht folgende Fehlermeldung ‚Cannot find symbol‘ symbol:constructor Mensch()
und dann bei jeder this Anweisung bekomme ich auch Fehlermeldungen.

String Matrikelnummer;
public Student (String Matrikelnummer, int alter, char geschlecht, String name){
this.name = „Jan“;
this.alter = 18;
this.Matrikelnummer = „02030401“;
this.geschlecht = ‚männlich‘;

}

name, alter, geschlecht sind in der Basisklasse Mensch private und können in der abgeleiteten Klasse Student nur mit ihren Set-Methoden gesetzt werden also:
this.name wäre setName(…)

geschlecht ist vom Typ char. Das heißt:
this.geschlecht = ‚männlich‘;
geht schonmal gar nicht!

Mach lieber ein enum wie folgt:
enum Geschlecht
{
männlich,
weiblich
}

Vielen Dank für die schnelle Antwort, ich habe jedoch noch ein paar Fragen.
Oben bei dem Konstruktor habe ich immer noch die Fehlermeldung und ich weiß nicht wie ich die beheben kann.
Bei dem Namen, Alter und der Matrikelnummer hat das mit dem set davor geklappt.
Beim Geschlecht mit dem enum leider nicht. Da steht ‚enum type must be local‘.
lg

Um Methoden und öffentliche Variablen der Parentclass zu nutzen, benutzt man das Schlüsselwort „super“ anstatt „this“. Nutze auch „super“ im Konstruktor deiner Klasse -> super(martikelnummer, …)

hi,
aber hier bekomm ich auch noch eine fehlermeldung
public class Student extends Mensch
und bei dem Konstruktor klappt das mit dem super davor auch nicht.
lg

hi,
im Konstruktor für Student muss die Super-Konstruktor (für Mensch) aufgerufen werden (als erster Zeile):

super(alter, geschlecht, name);

Dann kannst du
this.name = „Jan“;
this.alter = 18;
this.geschlecht = ‚männlich‘;

entfernen.

Weil du die super-Konstruktor nicht aufrufst, sucht der Compiler nach einem Default-Konstruktor für Mensch. Das existiert nicht und deswegen kriegst du den Fehler.

Die getter und setter-Methoden sollten übrigens „public“ sein.

Hi,
ich hab das Programm jetzt folgendermaßen umgeschrieben, bekomme aber immer noch bei ‚public class Student extends Mensch‘ und bei dem super-Befehl eine Fehlermeldung

package vererbung;

public class Student extends Mensch {
String Matrikelnummer;
super („020304“, 18, ‚m‘, Jan);

public void setMatrikelnummer(String Matrikelnummer) {
Matrikelnummer = Matrikelnummer;
}

public String getMatrikelnummer() {
return Matrikelnummer;
}

public String getTyp(String Student) {
return Student;
}
}

lg

Der Konstruktor fehlt:
public Student (String Matrikelnummer, int alter, char geschlecht, String name){
super („020304“, 18, ‚m‘, Jan);
this.Maktrikelnummer = …
}

Noch ein Tipp: für die Variablenamen benutze lieber eine lower-case Buchstabe (matrikelnummer statt Matrikelnummer).

Vielen Dank, das habe ich jetzt soweit:

package vererbung;

public class Student extends Mensch {

private String matrikelnummer;

public Student(String matrikelnummer, int alter, char geschlecht, String name) {
super(18, ‚m‘, „jan“);
this.matrikelnummer = „029384722“;

}

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

String getMatrikelnummer() {
return matrikelnummer;
}

String getTyp(String Student) {
return Student;
}
}

Jetzt muss ich noch folgenden Aufgabenteil bearbeiten und ich habe leider überhaupt keine Ahnung wie ich dabei vorgehen muss:

Schreiben Sie eine Applikation Uebung9App, die in einem Array drei
Objekte vom Typ Student anlegt. Initialisieren Sie die drei Objekte über den
Konstruktor der Klasse Student und geben Sie die Eigenschaften der
einzelnen Objekte auf dem Bildschirm aus!

na, dann fang mal an mit einer neuen Klasse (Uebung9App.java) und erstelle eine main-Methode. Dadrin 3 Aufrufe deiner Student-Konstruktor. Speichere die Ergebnisse in einer Array unt mit System.out.println kannst du sie rausgeben.

viel spass!

wenn das alles nur so leicht wär wie es da steht :smile:

Hallo,
ich habe jetzt das Programm Übung9App geschrieben jedoch erhalte ich 2 fehlermeldungen:
Einmal in dem Teil 'public class Uebung9App extends Mensch { ’
und hier ‚array[x] = new Student(String matrikelnummer, int alter, char geschlecht, String name);‘
beim 1. steht ‚cannot find symbol‘
und beim 2. 'internal error, cannot instantiate vererbung.Student

package vererbung;

public class Uebung9App extends Mensch {

public static void main(String args[]) {

Student[] array = new Student[3];
for (int x = 0; x

Hi,
das sieht gar nicht so schlecht aus :wink:

zu 1) warum erbst du von Mensch? Das muss weg.
public class Uebung9App {

zu 2) beim aufruf von new Student(…) gibt man nur die variablen an, nicht deren Typen. Sollte so aussehen:
array[x] = new Student(matrikelnummer, alter, geschlecht, name);

Hi,
jetzt habe ich nur noch bei Student die Fehlermeldung, obwohl ich die Datentypen entfernt habe.
lg

dann bitte die ganze Uebung9App.java posten

package vererbung;

public class Uebung9App {

public static void main(String args[]) {

Student[] array = new Student[3];
for (int x = 0; x

ja, sieht gut aus. Die Konstruktor-Methode für Student nimmt 4 Parameter, deswegen der Compile-Fehler.

hi, kommt aber leider immer noch ein Fehler bei ‚new Student‘

package vererbung;

public class Uebung9App {

public static void main(String args[]) {

Student[] array = new Student[3];
for (int x = 0; x

ja, eben. Bei new Student(…) hast du nur 3 Parameter, der Konstruktor verlangt aber 4.

Jetzt kommt bei ‚name‘ im Konstruktor ein Fehler, komischerweise. Der sagt mir ‚cannot find symbol‘

package vererbung;

public class Uebung9App {

public static void main(String args[]) {

Student[] array = new Student[3];
for (int x = 0; x