Kommunikation zwischen zwei Klassen

LionAge

Mitglied
Hallo liebe Community,

ich lerne gerade die Java-Programmierung, habe zuvor etwas C programmiert, somit ist nicht alles neu für mich - die Objektorientierung hingegen schon :)

Arbeite mit einem BlueJ-Buch wo ich nun folgende Aufgabe habe:

Ich soll ein Bankkonto erstellen das folgende Methoden beherrscht:
  • Kontostand ausgeben
  • Inhaber ausgeben
  • einzahlen
  • abheben
  • überweisen

zusätzlich noch Konstruktoren, die bei der Erstellung eine Einzahlung zulassen und eine Art "Freundschaftswerbung".

Das hat soweit gut geklappt - siehe

Java:
public class Konto 
{
    // Instanzvariablen
    
        int nummer;
        private String inhaber;
        private int kontoStand;
             
    // Konstruktoren

    Konto(int neueNummer, String name)
    {
        nummer = neueNummer;
        inhaber = name;
        kontoStand = 0;
    }
    
   
    Konto(int neueNummer, String name, int einzahlen)
    {
        nummer = neueNummer;
        inhaber = name;
        kontoStand += einzahlen;
    }
    
    Konto(int neueNummer, String name, int einzahlen, Konto empfänger, int werben)
    {
        nummer = neueNummer;
        inhaber = name;
        kontoStand += einzahlen;
        empfänger.einzahlen(60);
    
    
    
    }
    
    // Methoden
 
    int getKontoStand()
    {
        return kontoStand;
    }
    
    String getInhaber()
    {
        return inhaber;
    }
    
    void einzahlen(int betrag)
    {
        kontoStand += betrag;
    }
    
    void abheben(int betrag)
    {
        kontoStand -= betrag;
    }
    
    void überweisen (Konto empfänger, int betrag)
    {
        abheben(betrag);
        empfänger.einzahlen(betrag);
    }
    
    void werben (Konto empfänger, int betrag)
    {
        empfänger.einzahlen(betrag);
    }
}

Meine Aufgabe ist nun, den Inhaber in eine seperate Klasse auszulagern, der die folgenden Datenfelder hat:

Nachname
Vorname
Adresse

Ich habe natürlich etwas gelesen und gegoogelt. Mit extends kann ich ja z.b. von Klassen erben, aber eigentlich muss die Klasse Inhaber ja nicht von Konto erben oder? Ich brauche eine neue Klasse, die gewissen Methoden kann, die ich dann wiederum in der Klasse Konto aufrufe, am I right?

Dies war mein erster kümmerlicher Versuch

Java:
public class Inhaber extends Konto
{
    public String vorname;
    public String nachname;
    public String adresse;
}

 Inhaber(String neuerVorname, String neuerNachname, String neueAdresse)
    {
        vorname = neuerVorname;
        nachname = neuerNachname;
        adresse = neueAdresse;
    }

Mir fehlt da irgendwie der passende Denkanstoß oder Tipp wie ich nun fortfahren muss.

Schonmal Danke an potentielle Helfer :>
 
Zuletzt bearbeitet:

Enceladus271

Bekanntes Mitglied
Es macht keinen Sinn Inhaber von Konto abzuleiten. Dies würde ja bedeuten, dass ein Inhaber auch ein Konto IST.
- Also erstmal das "extends Konto" weg.
- In der Klasse Inhaber sollten dann noch getter Methoden implementiert werden, wie z.B. getName().
- Und in der Klasse Konto musst du dann "private String inhaber" durch "private Inhaber inhaber" ersetzen. Alle Methoden in denen inhaber verwendet wird, müssen dann entsprechend angepasst werden.
 

LionAge

Mitglied
vielen Dank, das hat jetzt geklappt. Auf dieses < Inhaber inhaber > bin ich irgendwie kaum gestoßen in Literatur und Internet, aber jetzt kenn ich es ja :toll:
 
D

David Nienhaus

Gast
Hallo, ich verzweifle gerade an exakt der gleichen Aufgabe und ich komme trotz der Antworten hier nicht weiter :s

Ich verstehe einfach nicht, wie ich im Konstruktor der Klasse Konto die Klasse Inhaber implementieren kann.

Hier mein Code der Klasse Inhaber :

Code:
public class Inhaber
{
    public String vorname;
    public String nachname;
    public String adresse;
  
    public Inhaber(String neuerVorname, String neuerNachname, String neueAdresse){
        vorname = neuerVorname;
        nachname = neuerNachname;
        adresse = neueAdresse;
    }

     String getVorname()
    {
       return vorname;
    }
  
     String getNachname()
    {
       return nachname;
    }
  
     String getAdresse()
    {
       return adresse;
    }
}

Und heir mein Code der Klasse Konto
(Habe die Methoden und alles nochmal rausgeschmissen, um den Fokus erstmal auf das Konstruktorproblem zu setzen)

Code:
public class Konto
{
    int nummer;
    int kontoStand;
    Inhaber inhaber;

    Konto(int neueNummer, int betrag) {
    nummer = neueNummer;
    kontoStand = betrag;
    inhaber = new Inhaber();   // Hier meckert der compiler
    }

}

Der Fehercode bezieht sich auf die drei Strings.. ich habe leider keine ahnung wie das funktioniert.. echt zum verzweifeln :O
Ich hoffe auf schnelle Hilfe, ich brauche das ganze schon übermorgen :/
 

Robat

Top Contributor
1. Das nächste mal bitte einen eigenen Thread aufmachen.
2. Dein Konstruktor der Klasse Inhaber sieht so aus Inhaber(String neuerVorname, String neuerNachname, String neueAdresse) .. demnach musst du dem Konstruktor auch 3 Strings übergeben.
 
D

David Nienhaus

Gast
Ach so, tut mir leid! Viele andere Foren verweisen immer auf die Suchfunktion damit nichts doppelt gefragt wird und da das hier wirklich die gleiche Aufgabe ist dachte ich es würde Sinn machen.

Okay ich wusste leider nicht wie das denn konkret auszusehen hat. Bin jetzt aber fündig geworden: ("","","").
Damit klappts :)
Jetzt stehe ich vorm nächsten Problem.
Ich habe meine Klasse Inhaber mit drei Methoden ausgestattet und möchte diese jetzt in der Klasse Konto aufrufen.
Wie kann ich das machen? Bzw was mache ich falsch:

Inhaber Code:
Code:
public class Inhaber
{
    // Instanzvariablen - ersetzen Sie das folgende Beispiel mit Ihren Variablen
    public String vorname;
    public String nachname;
    public String adresse;
 
    public Inhaber(String neuerVorname, String neuerNachname, String neueAdresse){
        vorname = neuerVorname;
        nachname = neuerNachname;
        adresse = neueAdresse;
    }

    String getVorname()
    {
        return vorname;
    }
 
    String getNachname()
    {
        return nachname;
    }
 
    String getAdresse()
    {
        return adresse;
    }
}

Konto Code:

Code:
public class Konto
{
    int nummer;
    int kontoStand;
    Inhaber inhaber;

    Konto(int neueNummer) {
    nummer = neueNummer;
    kontoStand = 0;
    inhaber = new Inhaber("","","");
    }
 
    Konto(int neueNummer,int ersteinzahlung)
    {
        nummer = neueNummer;
        kontoStand += ersteinzahlung;
        inhaber = new Inhaber("","","");
    }
 
    Konto(int neueNummer,int einzahlen, Konto empfänger)
    {
        nummer = neueNummer;
        inhaber = new Inhaber("","","");
        kontoStand += einzahlen;
        empfänger.einzahlen(60);
    }
 
    int getKontoStand()
    {
        return kontoStand;
    }
 
    String getInhaber()
    {
     return inhaber.getVorname();
     return inhaber.getNachname();
     return inhaber.getAdresse();
    }
 
    void einzahlen(int betrag)
    {
        kontoStand += betrag;
    }
 
    void abheben(int betrag)
    {
        kontoStand -= betrag;
    }
 
    void überweisen (Konto empfänger, int betrag)
    {
        abheben(betrag);
        empfänger.einzahlen(betrag);
    }

}

Das Problem liegt bei der Methode getInhaber
(Die
 

Robat

Top Contributor
Eine Methode wird nach einem return-Statement verlassen. Demnach werden die beiden Zeilen
Java:
return inhaber.getNachname();
return inhaber.getAdresse();
nie aufgeführt werden.

Wenn du alle Informationen eines Inhabers zurückgeben willst musst du die einzelnen Strings verknüpfen und den zusammengefügten String zurückgeben.
 

Robat

Top Contributor
Na das sollte man aber schon mal gesehen haben ;)
Java:
String a  = "Hallo ";
String b = "Welt";
String c = a + b;
 
D

David Nienhaus

Gast
Ja wahrscheinlich schon, ich bin aber glaube ich wirklich ein hoffnungsloser Fall was Programmieren angeht :D

Okay, das ist schonmal gut zu wissen! Allerdings weiß ich noch nicht, wie ich Die Informationen von zB. meiner getVorname Methode in einen String reinbekomme.

String v = inhaber.getVorname(); wäre jetzt meine erste Idee gewesen, das scheint aber leider nicht zu klappen..
 

Robat

Top Contributor
Du musst es nicht mal zwischenspeichern. Deine Methoden geben ja Strings zurück... diese Strings kannst du verknüpfen und zurückgeben.
 
D

David Nienhaus

Gast
Aber auch wenn ich es nicht zwischenspeichere stehe ich noch immer vor dem selben Problem, ich weiß nicht wie ich das ganze konkret aufbauen muss.

sage ich einfach return inhaber.getVorname() + inhaber.getNachname() + inhaber.getAdresse(); ?:(
 
D

David Nienhaus

Gast
Also ich finde gerade leider Garnichts schön daran.. ich sitze seit heute morgen an dieser Aufgabe und bin mittlerweile echt frustriert. Hinzu kommt dass ich echt Zeitdruck habe... Schön ist wirklich was anderes
 
D

David Nienhaus

Gast
Ich wäre wirklich mehr als dankbar, wenn mir jemand konkret anhand von einem kleinen Codebeispiel zeigen könnte wie es richtig geht
 

Robat

Top Contributor
Java:
class Foo {
     private String x;
     private String y;
    
     public String getX() { return x; }
     public String getY() { return y; }
}

class Bar{
     private Foo foo;
     public Bar() { this.foo = new Foo(); }

     public String getAll() {
            return "X: " + foo.getX() + "; Y: " + foo.getY();
     }
}
 

Neue Themen


Oben