Private Class Problem

Schrubber

Bekanntes Mitglied
Hallo Ihr,

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.

Weiß da derweil nicht mehr weiter :/


Wäre über jede Hilfe dankbar 🙂
 
[c]gk.setKontoinhaber = "Max Mustermann";[/c]
so ruft man keine Methoiden auf 😀

-->
[c]gk.setKontoinhaber("Max Mustermann");[/c]

und beim Setter setzt man und gibt nix zurück ! (meistens jedenfalls)
Java:
    public String setKontoinhaber(String a)
    {
        return kontoinhaber = a;
    }

=>
Java:
    public void setKontoinhaber(String a)
    {
        this.kontoinhaber = a;
    }
 
Zuletzt bearbeitet:
Eine Frage zur Aufgabenstellung hätte ich noch:

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.

Hab die Klasse Konto so abgeändert, wie Aufgabe 1 es meiner Meinung nach erfordert:

Java:
	public static void main(String[] args)
	{		
willi();
	}
	public static void willi()
	{
	Sparkonto sp = new Sparkonto();
	Girokonto gk = new Girokonto();
	gk.setkontoinhaber("Max Mustermann");
	}
	

}

Was meint mein Lehrer mit Aufgabe 2? 😵

Danke im vorraus 🙂
 
In Aufgabe 2 sollst du in der Klasse Girokonto einen Konstruktor schreiben, der einen String als Paramter erwartet.

public Girokonto(String name){
this.kontoinhaber = name;
}

EDIT: Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 6.5 Objekte anlegen und zerstören

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 ?!
 
Zuletzt bearbeitet:
Willi is bei uns immer ein Beispielsmethodenname ^^

Bei mir endet das Programm mit
java.lang.NoSuchMethodError: main
Exception in thread "main"

public void main(String[] args)
{
Girokonto gk = new Girokonto();
Sparkonto sk = new Sparkonto();

Girokonto("Test");
System.out.println(gk.getkontoinhaber());
}
public void Girokonto(String name)
{
this.kontoinhaber = name;
}

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());
    }
 
Zuletzt bearbeitet:

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.

Wenn innerhalb des Konstruktors der Konto-Klasse, Instanzen von Girokonto erzeugt werden sollen--> ?? Endlosschleife...

oder ich bin gerade total Banane
 
Zuletzt bearbeitet:
Das ist die komplette Aufgabenstellung.

Übungsaufgraben Programmieren


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


Bin bis zu dem gestrichelten bereits fertig. (Hoffe ich zumindest 😱)
 
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)
 
Zuletzt bearbeitet:
Soo.

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.

Also hab ich das Ding nun so geschrieben:

Java:
    public static void main(String[] args)
    {       
Konto("Test");
    }

	public Konto(String name)
    {
    	Sparkonto sp = new Sparkonto();
        Girokonto gk = new Girokonto();
        gk.setkontoinhaber(name);
    }


Ist aber ein Error drin:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method Konto(String) is undefined for the type Konto


Ich muss aber sowas in der Art machen.
Bin über Lösungsvorschläge wiedermal erfreut 🙂


Schrubber
 
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
Java:
super("Test");
 

Neue Themen


Zurück
Oben