Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich sitz grad an meinen Hausaufgaben und komme nicht weiter :/
Mein bisheriges Programm:
Konto-Klasse
Java:
public class Konto {
public int habenzins;
public int kontonummer;
public String kontoinhaber;
public static void main(String[] args)
{
Sparkonto sp = new Sparkonto();
Girokonto gk = new Girokonto();
gk.setKontoinhaber = "Max Mustermann";
System.out.println(gk.getKontoinhaber());
}
}
Girokonto-Klasse
Java:
public class Girokonto extends Konto
{
public int sollzins;
public int habenzins;
public int kontonummer;
private String kontoinhaber;
public String setKontoinhaber;
public String getKontoinhaber()
{
return kontoinhaber;
}
public String setKontoinhaber(String a)
{
return kontoinhaber = a;
}
}
Mein Problem liegt daran, dass ich gerne die private Variable in dem GiroKonto verändert haben möchte. Sie muss privat sein, so ist die Aufgabenstellung. Nun hab ich dazu einmal zum Auslesen der privaten Methode die getKontoinhaber, zum schreiben die setKontoinhaber. Nur wenn ich setKontoinhaber(Max Mustermann) mache, gibt er mir den Wert "null" aus.
1. Sie haben noch kein Objekt der Klasse Konto erstellt.
Ändern Sie daher die Klasse Konto so ab, dass in der main-Methode lediglich ein neues Objekt von Konto erzeugt wird. Die Erstellung der beiden Giro- und Sparkontoobjekte verschieben Sie in den neu zu erstellenden Konstruktor der Konto-Klasse.
Der einfachste Konstruktor der Klasse Willi ist public Willi() {…}
2. Bisher wird erst das Girokonto-Objekt erzeugt und danach der Kontoinhaber gesetzt. Das ist umständlich.
Programmieren Sie einen Konstruktor für die Klasse Girokonto, dem der Kontoinhaber übergeben wird. Im Konstruktor wird der übergebene Kontoinhabername in die private Variable übernommen.
Allerdings ist die Aufgabe 1 von dir falsch gelöst meiner Meinung nach (allerdings verwirrt mich irgendwie der letzte Satz..wer oder was ist Willi? :lol: (daher bin ich lieber still))
EDIT2: Hää? Irgendwie ergibt Aufgabe 1 doch gar keinen Sinn oder bin ich jetzt doof? Das endet doch in einem StackOverflowError ?!
Ich komm grad gar nicht drauf klar, wie ich nun die main methode in ein static ändern kann, ohne das Girokonto auf static und somit unbrauchbar zu machen..
Edit:
Java:
public static void main(String[] args)
{
Girokonto gk = new Girokonto();
Sparkonto sk = new Sparkonto();
Girokonto("Test");
System.out.println(gk.getkontoinhaber());
}
public static void Girokonto(String name)
{
Girokonto gk = new Girokonto();
gk.setkontoinhaber(name);
}
Ergibt 0 Sinn -> Ausgabe "null".
Edit 3:
Sieht das schon eher aus wie die Lösung?
Java:
public static void main(String[] args)
{
willi();
}
public static void willi()
{
Sparkonto sp = new Sparkonto();
Girokonto gk = new Girokonto();
gk.setkontoinhaber("Max Mustermann");
System.out.println(gk.getkontoinhaber());
}
ja das extends habe ich gesehen, deshalb fragte ich noch einmal nach: steht das aber auch so in der Aufgabenstellung?
Denn Aufgabe 1 Zitat:
dass in der main-Methode lediglich ein neues Objekt von Konto erzeugt wird. Die Erstellung der beiden Giro- und Sparkontoobjekte verschieben Sie in den neu zu erstellenden Konstruktor der Konto-Klasse.
Erstellen Sie in Eclipse die Klassen Konto mit den Attributen Habenzins, Kontonummer und Kontoinhaber, Girokonto mit der Eigenschaft Sollzins und Sparkonto. Alle Attribute sind zunächst öffentlich (public).
Erstellen Sie in der Klasse Konto die main-Methode. Darin erzeugen Sie sich je ein Objekt der Klassen Giro- und Sparkonto in den Variablen gk und sp. Nutzen Sie dafür den new-Operator:
Willi w = new Willi();
Setzen Sie den Kontoinhaber des Girokontos auf den Wert „Max Mustermann“. Nutzen Sie dafür den Punkt-Operator:
w.eigenschaft = wert;
Ändern Sie den Zugriffsspezifizierer der Eigenschaft Kontoinhaber von public auf private. Was ändert sich bei der Kompilierung des Programms und warum?
Ergänzen Sie die Klasse Girokonto um die öffentlichen Methoden getKontoinhaber und setKontoinhaber, um die private Variable Kontoinhaber von außen lesen und schreiben zu können.
Ändern Sie den Befehl aus 2) nun so ab, dass er trotz der private-Deklaration funktioniert.
Setzen Sie nun alle weiteren Attribute auf private und erstellen Sie in den Klassen die nötigen getter- und setter-Methoden. Kann Sie Eclipse dabei unterstützen?
-----------------------------------------------------------------------
Sie haben noch kein Objekt der Klasse Konto erstellt.
Ändern Sie daher die Klasse Konto so ab, dass in der main-Methode lediglich ein neues Objekt von Konto erzeugt wird. Die Erstellung der beiden Giro- und Sparkontoobjekte verschieben Sie in den neu zu erstellenden Konstruktor der Konto-Klasse.
Der einfachste Konstruktor der Klasse Willi ist public Willi() {…}
Bisher wird erst das Girokonto-Objekt erzeugt und danach der Kontoinhaber gesetzt. Das ist umständlich.
Programmieren Sie einen Konstruktor für die Klasse Girokonto, dem der Kontoinhaber übergeben wird. Im Konstruktor wird der übergebene Kontoinhabername in die private Variable übernommen.
Eine Variable kann auch als final deklariert werden. Um die Auswirkungen zu testen, fügen Sie der Variablendeklaration von Kontoinhaber das Schlüsselwort final zu. Was passiert beim Kompilieren und warum? Recherchieren Sie ggf.
Die eine private finale Zählvariable in der Klasse Willi würde so deklariert:
private final int zaehler; ein
Sind aber gerade bei dem Thema Vererbung.
Und wie sollte ich sonst das machen:
Ergänzen Sie die Klasse Girokonto um die öffentlichen Methoden getKontoinhaber und setKontoinhaber, um die private Variable Kontoinhaber von außen lesen und schreiben zu können.
ja grundsätzlich ist es logisch, da eine vererbung zu machen, nur wie eRaaa schon geschrieben hat läuft man bei einem Konstruktoraufruf einer subklasse in der mutterklasse im kreis...
du hast ja:
Java:
class Konto {
Konto() {
new Girokonto(); // Girokonto wird aufgeruden
}
}
class Girokonto extends Konto {
Girokonto() {
super(); // Konto wird aufgerufen
}
}
Also für mich siehts fast so aus, als wenn du die Klasse Konto nicht erweitern sollst. Schon allein weil alle Attribute private und nicht protected deklariert werden sollen, weil nichts von extends steht und wegen dem schon angesprochenem Problem!....
Aber ich finde die Aufgaben eh merkwürdig und will nun auch nichts falsches erzählen, daher klinke ich mir hier mal lieber aus (sry)
Mein Lehrer sagte, dass das mit dem erweitern schon richtig sei.
Ich finde in Ihren Klassen keine Konstruktoren. Sie müssen ja nach dem Motto
public Girokonto(...parameter...)
{
}
erzeugt werden. Das hat mit "static"-Deklarationen erst einmal nichts zu tun.
Ja klar du hast ja gesagt dass der Konstruktor für Konto einen String als Parameter erwartet. Dann musst du natürlich auch einen String angeben hier also